@rxap/layout 16.0.0-dev.0 → 16.0.0-dev.10
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 +378 -0
- package/LICENSE +621 -21
- package/LICENSE.md +621 -0
- package/README.md +7 -22
- package/esm2022/index.mjs +5 -20
- package/esm2022/lib/app-url.service.mjs +64 -0
- package/esm2022/lib/footer/footer.component.mjs +13 -42
- package/esm2022/lib/footer.directive.mjs +21 -35
- package/esm2022/lib/header/apps-button/apps-button.component.mjs +42 -101
- package/esm2022/lib/header/header.component.mjs +66 -108
- package/esm2022/lib/header/language-selector/language-selector.component.mjs +30 -108
- package/esm2022/lib/header/navigation-progress-bar/navigation-progress-bar.component.mjs +22 -26
- package/esm2022/lib/header/reset-button/reset-button.component.mjs +16 -21
- package/esm2022/lib/header/sidenav-toggle-button/sidenav-toggle-button.component.mjs +20 -36
- package/esm2022/lib/header/sign-out/sign-out.component.mjs +19 -28
- package/esm2022/lib/header/user-profile-icon/user-profile-icon.component.mjs +39 -109
- package/esm2022/lib/i18n-check.guard.mjs +34 -0
- package/esm2022/lib/i18n.service.mjs +36 -0
- package/esm2022/lib/language-selector.service.mjs +34 -0
- package/esm2022/lib/layout/layout.component.mjs +58 -72
- package/esm2022/lib/layout/layout.component.service.mjs +21 -22
- package/esm2022/lib/navigation/navigation-item/navigation-item.component.mjs +120 -234
- package/esm2022/lib/navigation/navigation-item.mjs +4 -4
- package/esm2022/lib/navigation/navigation.component.mjs +47 -91
- package/esm2022/lib/navigation/navigation.service.mjs +28 -27
- package/esm2022/lib/navigation/replace-router-paths.service.mjs +9 -10
- package/esm2022/lib/sidenav/sidenav-footer.directive.mjs +15 -15
- package/esm2022/lib/sidenav/sidenav-header.directive.mjs +15 -15
- package/esm2022/lib/sidenav/sidenav.component.mjs +40 -112
- package/esm2022/lib/sidenav/sidenav.component.service.mjs +8 -9
- package/esm2022/lib/sidenav/version/version.component.mjs +17 -44
- package/esm2022/lib/toggle-window-sidenav-button/toggle-window-sidenav-button.component.mjs +19 -40
- package/esm2022/lib/tokens.mjs +1 -1
- package/esm2022/lib/types.mjs +1 -1
- package/esm2022/lib/window-container-sidenav/window-container-sidenav.component.mjs +18 -36
- package/esm2022/rxap-layout.mjs +1 -1
- package/fesm2022/rxap-layout.mjs +761 -1845
- package/fesm2022/rxap-layout.mjs.map +1 -1
- package/index.d.ts +4 -17
- package/lib/app-url.service.d.ts +26 -0
- package/lib/footer/footer.component.d.ts +1 -1
- package/lib/footer.directive.d.ts +2 -7
- package/lib/header/apps-button/apps-button.component.d.ts +13 -21
- package/lib/header/header.component.d.ts +8 -11
- package/lib/header/language-selector/language-selector.component.d.ts +2 -17
- package/lib/header/navigation-progress-bar/navigation-progress-bar.component.d.ts +1 -1
- package/lib/header/reset-button/reset-button.component.d.ts +1 -1
- package/lib/header/sidenav-toggle-button/sidenav-toggle-button.component.d.ts +1 -1
- package/lib/header/sign-out/sign-out.component.d.ts +5 -5
- package/lib/header/user-profile-icon/user-profile-icon.component.d.ts +12 -8
- package/lib/i18n-check.guard.d.ts +14 -0
- package/lib/i18n.service.d.ts +12 -0
- package/lib/language-selector.service.d.ts +15 -0
- package/lib/layout/layout.component.d.ts +8 -4
- package/lib/navigation/navigation-item/navigation-item.component.d.ts +11 -18
- package/lib/navigation/navigation-item.d.ts +1 -1
- package/lib/navigation/navigation.component.d.ts +6 -6
- package/lib/navigation/navigation.service.d.ts +1 -1
- package/lib/sidenav/sidenav-footer.directive.d.ts +1 -1
- package/lib/sidenav/sidenav-header.directive.d.ts +1 -1
- package/lib/sidenav/sidenav.component.d.ts +1 -1
- package/lib/sidenav/version/version.component.d.ts +3 -3
- package/lib/toggle-window-sidenav-button/toggle-window-sidenav-button.component.d.ts +3 -5
- package/lib/types.d.ts +3 -2
- package/lib/window-container-sidenav/window-container-sidenav.component.d.ts +2 -2
- package/package.json +90 -67
- package/theme.css +1 -0
- package/collection.json +0 -10
- package/esm2022/lib/footer/footer.component.module.mjs +0 -30
- package/esm2022/lib/header/apps-button/apps-button.component.module.mjs +0 -46
- package/esm2022/lib/header/header.component.module.mjs +0 -70
- package/esm2022/lib/header/language-selector/language-selector.component.module.mjs +0 -30
- package/esm2022/lib/header/navigation-progress-bar/navigation-progress-bar.component.module.mjs +0 -26
- package/esm2022/lib/header/reset-button/reset-button.component.module.mjs +0 -26
- package/esm2022/lib/header/sidenav-toggle-button/sidenav-toggle-button.component.module.mjs +0 -30
- package/esm2022/lib/header/sign-out/sign-out.component.module.mjs +0 -30
- package/esm2022/lib/header/user-profile-icon/user-profile-icon.component.module.mjs +0 -38
- package/esm2022/lib/layout/layout.component.module.mjs +0 -70
- package/esm2022/lib/navigation/navigation.component.module.mjs +0 -71
- package/esm2022/lib/navigation/replace-router-paths.pipe.mjs +0 -36
- package/esm2022/lib/sidenav/sidenav.component.module.mjs +0 -44
- package/esm2022/lib/sidenav/version/version.component.module.mjs +0 -26
- package/esm2022/lib/sidenav-content/sidenav-content.component.mjs +0 -46
- package/esm2022/lib/sidenav-content/sidenav-content.component.module.mjs +0 -26
- package/esm2022/lib/sidenav-content/sidenav-content.component.service.mjs +0 -37
- package/esm2022/lib/toggle-window-sidenav-button/toggle-window-sidenav-button.component.module.mjs +0 -30
- package/esm2022/lib/window-container-sidenav/window-container-sidenav.component.module.mjs +0 -30
- package/lib/footer/footer.component.module.d.ts +0 -10
- package/lib/header/apps-button/apps-button.component.module.d.ts +0 -14
- package/lib/header/header.component.module.d.ts +0 -20
- package/lib/header/language-selector/language-selector.component.module.d.ts +0 -10
- package/lib/header/navigation-progress-bar/navigation-progress-bar.component.module.d.ts +0 -9
- package/lib/header/reset-button/reset-button.component.module.d.ts +0 -9
- package/lib/header/sidenav-toggle-button/sidenav-toggle-button.component.module.d.ts +0 -10
- package/lib/header/sign-out/sign-out.component.module.d.ts +0 -10
- package/lib/header/user-profile-icon/user-profile-icon.component.module.d.ts +0 -12
- package/lib/layout/layout.component.module.d.ts +0 -20
- package/lib/navigation/navigation.component.module.d.ts +0 -19
- package/lib/navigation/replace-router-paths.pipe.d.ts +0 -16
- package/lib/sidenav/sidenav.component.module.d.ts +0 -15
- package/lib/sidenav/version/version.component.module.d.ts +0 -9
- package/lib/sidenav-content/sidenav-content.component.d.ts +0 -12
- package/lib/sidenav-content/sidenav-content.component.module.d.ts +0 -9
- package/lib/sidenav-content/sidenav-content.component.service.d.ts +0 -15
- package/lib/toggle-window-sidenav-button/toggle-window-sidenav-button.component.module.d.ts +0 -10
- package/lib/window-container-sidenav/window-container-sidenav.component.module.d.ts +0 -10
- package/migration.json +0 -4
- package/src/schematics/ng-add/index.d.ts +0 -2
- package/src/schematics/ng-add/index.js +0 -8
- package/src/schematics/ng-add/index.js.map +0 -1
- package/src/schematics/ng-add/schema.json +0 -7
|
@@ -1,45 +1,29 @@
|
|
|
1
1
|
import { __decorate, __metadata } from "tslib";
|
|
2
|
-
import {
|
|
2
|
+
import { ChangeDetectionStrategy, Component, Input, } from '@angular/core';
|
|
3
3
|
import { MatSidenav } from '@angular/material/sidenav';
|
|
4
4
|
import { Required } from '@rxap/utilities';
|
|
5
|
+
import { MatIconModule } from '@angular/material/icon';
|
|
6
|
+
import { NgIf } from '@angular/common';
|
|
7
|
+
import { MatButtonModule } from '@angular/material/button';
|
|
5
8
|
import * as i0 from "@angular/core";
|
|
6
|
-
import * as i1 from "@angular/material/
|
|
7
|
-
import * as i2 from "@angular/
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
i0.ɵɵ
|
|
11
|
-
i0.ɵɵtext(1, "menu");
|
|
12
|
-
i0.ɵɵelementEnd();
|
|
13
|
-
} }
|
|
14
|
-
function SidenavToggleButtonComponent_mat_icon_2_Template(rf, ctx) { if (rf & 1) {
|
|
15
|
-
i0.ɵɵelementStart(0, "mat-icon");
|
|
16
|
-
i0.ɵɵtext(1, "menu_open");
|
|
17
|
-
i0.ɵɵelementEnd();
|
|
18
|
-
} }
|
|
19
|
-
class SidenavToggleButtonComponent {
|
|
20
|
-
static { this.ɵfac = function SidenavToggleButtonComponent_Factory(t) { return new (t || SidenavToggleButtonComponent)(); }; }
|
|
21
|
-
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SidenavToggleButtonComponent, selectors: [["rxap-sidenav-toggle-button"]], hostAttrs: [1, "rxap-sidenav-toggle-button"], inputs: { sidenav: "sidenav" }, decls: 3, vars: 2, consts: [["mat-icon-button", "", 3, "click"], [4, "ngIf"]], template: function SidenavToggleButtonComponent_Template(rf, ctx) { if (rf & 1) {
|
|
22
|
-
i0.ɵɵelementStart(0, "button", 0);
|
|
23
|
-
i0.ɵɵlistener("click", function SidenavToggleButtonComponent_Template_button_click_0_listener() { return ctx.sidenav.toggle(); });
|
|
24
|
-
i0.ɵɵtemplate(1, SidenavToggleButtonComponent_mat_icon_1_Template, 2, 0, "mat-icon", 1);
|
|
25
|
-
i0.ɵɵtemplate(2, SidenavToggleButtonComponent_mat_icon_2_Template, 2, 0, "mat-icon", 1);
|
|
26
|
-
i0.ɵɵelementEnd();
|
|
27
|
-
} if (rf & 2) {
|
|
28
|
-
i0.ɵɵadvance(1);
|
|
29
|
-
i0.ɵɵproperty("ngIf", !ctx.sidenav.opened);
|
|
30
|
-
i0.ɵɵadvance(1);
|
|
31
|
-
i0.ɵɵproperty("ngIf", ctx.sidenav.opened);
|
|
32
|
-
} }, dependencies: [i1.MatIcon, i2.NgIf, i3.MatLegacyButton], changeDetection: 0 }); }
|
|
9
|
+
import * as i1 from "@angular/material/button";
|
|
10
|
+
import * as i2 from "@angular/material/icon";
|
|
11
|
+
export class SidenavToggleButtonComponent {
|
|
12
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: SidenavToggleButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
13
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.4", type: SidenavToggleButtonComponent, isStandalone: true, selector: "rxap-sidenav-toggle-button", inputs: { sidenav: "sidenav" }, ngImport: i0, template: "<button (click)=\"sidenav.toggle()\" mat-icon-button>\n <mat-icon *ngIf=\"!sidenav.opened\">menu</mat-icon>\n <mat-icon *ngIf=\"sidenav.opened\">menu_open</mat-icon>\n</button>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
33
14
|
}
|
|
34
15
|
__decorate([
|
|
35
16
|
Required,
|
|
36
17
|
__metadata("design:type", MatSidenav)
|
|
37
18
|
], SidenavToggleButtonComponent.prototype, "sidenav", void 0);
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
19
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: SidenavToggleButtonComponent, decorators: [{
|
|
20
|
+
type: Component,
|
|
21
|
+
args: [{ selector: 'rxap-sidenav-toggle-button', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
|
|
22
|
+
MatButtonModule,
|
|
23
|
+
NgIf,
|
|
24
|
+
MatIconModule,
|
|
25
|
+
], template: "<button (click)=\"sidenav.toggle()\" mat-icon-button>\n <mat-icon *ngIf=\"!sidenav.opened\">menu</mat-icon>\n <mat-icon *ngIf=\"sidenav.opened\">menu_open</mat-icon>\n</button>\n" }]
|
|
26
|
+
}], propDecorators: { sidenav: [{
|
|
27
|
+
type: Input
|
|
28
|
+
}] } });
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lkZW5hdi10b2dnbGUtYnV0dG9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2FuZ3VsYXIvbGF5b3V0L3NyYy9saWIvaGVhZGVyL3NpZGVuYXYtdG9nZ2xlLWJ1dHRvbi9zaWRlbmF2LXRvZ2dsZS1idXR0b24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYW5ndWxhci9sYXlvdXQvc3JjL2xpYi9oZWFkZXIvc2lkZW5hdi10b2dnbGUtYnV0dG9uL3NpZGVuYXYtdG9nZ2xlLWJ1dHRvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsS0FBSyxHQUNOLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7Ozs7QUFjM0QsTUFBTSxPQUFPLDRCQUE0Qjs4R0FBNUIsNEJBQTRCO2tHQUE1Qiw0QkFBNEIsc0hDdkJ6QyxzTEFJQSx5RERjSSxlQUFlLDRMQUNmLElBQUksNEZBQ0osYUFBYTs7QUFPUjtJQUROLFFBQVE7OEJBQ1EsVUFBVTs2REFBQzsyRkFKakIsNEJBQTRCO2tCQVp4QyxTQUFTOytCQUNFLDRCQUE0QixtQkFHckIsdUJBQXVCLENBQUMsTUFBTSxjQUNuQyxJQUFJLFdBQ1A7d0JBQ1AsZUFBZTt3QkFDZixJQUFJO3dCQUNKLGFBQWE7cUJBQ2Q7OEJBTU0sT0FBTztzQkFGYixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0U2lkZW5hdiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NpZGVuYXYnO1xuaW1wb3J0IHsgUmVxdWlyZWQgfSBmcm9tICdAcnhhcC91dGlsaXRpZXMnO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgTmdJZiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdyeGFwLXNpZGVuYXYtdG9nZ2xlLWJ1dHRvbicsXG4gIHRlbXBsYXRlVXJsOiAnLi9zaWRlbmF2LXRvZ2dsZS1idXR0b24uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsgJy4vc2lkZW5hdi10b2dnbGUtYnV0dG9uLmNvbXBvbmVudC5zY3NzJyBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIE1hdEJ1dHRvbk1vZHVsZSxcbiAgICBOZ0lmLFxuICAgIE1hdEljb25Nb2R1bGUsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIFNpZGVuYXZUb2dnbGVCdXR0b25Db21wb25lbnQge1xuXG4gIEBJbnB1dCgpXG4gIEBSZXF1aXJlZFxuICBwdWJsaWMgc2lkZW5hdiE6IE1hdFNpZGVuYXY7XG5cbn1cbiIsIjxidXR0b24gKGNsaWNrKT1cInNpZGVuYXYudG9nZ2xlKClcIiBtYXQtaWNvbi1idXR0b24+XG4gIDxtYXQtaWNvbiAqbmdJZj1cIiFzaWRlbmF2Lm9wZW5lZFwiPm1lbnU8L21hdC1pY29uPlxuICA8bWF0LWljb24gKm5nSWY9XCJzaWRlbmF2Lm9wZW5lZFwiPm1lbnVfb3BlbjwvbWF0LWljb24+XG48L2J1dHRvbj5cbiJdfQ==
|
|
@@ -1,32 +1,23 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { ChangeDetectionStrategy, Component, } from '@angular/core';
|
|
2
|
+
import { RxapAuthenticationService } from '@rxap/authentication';
|
|
3
|
+
import { MatIconModule } from '@angular/material/icon';
|
|
4
|
+
import { MatButtonModule } from '@angular/material/button';
|
|
3
5
|
import * as i0 from "@angular/core";
|
|
4
|
-
import * as i1 from "@
|
|
5
|
-
import * as i2 from "@angular/material/
|
|
6
|
-
import * as i3 from "@
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
this.router = router;
|
|
6
|
+
import * as i1 from "@rxap/authentication";
|
|
7
|
+
import * as i2 from "@angular/material/button";
|
|
8
|
+
import * as i3 from "@angular/material/icon";
|
|
9
|
+
export class SignOutComponent {
|
|
10
|
+
constructor(authenticationService) {
|
|
11
|
+
this.authenticationService = authenticationService;
|
|
11
12
|
}
|
|
12
|
-
|
|
13
|
-
this.
|
|
13
|
+
async logout() {
|
|
14
|
+
await this.authenticationService.signOut();
|
|
14
15
|
}
|
|
15
|
-
static { this.ɵfac =
|
|
16
|
-
static { this.ɵcmp =
|
|
17
|
-
i0.ɵɵelementStart(0, "button", 0);
|
|
18
|
-
i0.ɵɵlistener("successful", function SignOutComponent_Template_button_successful_0_listener() { return ctx.redirectToRoot(); });
|
|
19
|
-
i0.ɵɵelementStart(1, "mat-icon");
|
|
20
|
-
i0.ɵɵtext(2, "login");
|
|
21
|
-
i0.ɵɵelementEnd()();
|
|
22
|
-
} }, dependencies: [i1.MatLegacyButton, i2.MatIcon, i3.SignOutDirective], changeDetection: 0 }); }
|
|
16
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: SignOutComponent, deps: [{ token: i1.RxapAuthenticationService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
17
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.4", type: SignOutComponent, isStandalone: true, selector: "rxap-sign-out", ngImport: i0, template: "<button\n mat-icon-button\n (click)=\"logout()\"\n>\n <mat-icon>login</mat-icon>\n</button>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
23
18
|
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
type: Inject,
|
|
30
|
-
args: [Router]
|
|
31
|
-
}] }]; }, null); })();
|
|
32
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbi1vdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9sYXlvdXQvc3JjL2xpYi9oZWFkZXIvc2lnbi1vdXQvc2lnbi1vdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9sYXlvdXQvc3JjL2xpYi9oZWFkZXIvc2lnbi1vdXQvc2lnbi1vdXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCx1QkFBdUIsRUFDdkIsTUFBTSxFQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7O0FBRXpDLE1BT2EsZ0JBQWdCO0lBRTNCLFlBRW1CLE1BQWM7UUFBZCxXQUFNLEdBQU4sTUFBTSxDQUFRO0lBQzlCLENBQUM7SUFFRyxjQUFjO1FBQ25CLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUUsR0FBRyxDQUFFLENBQUMsQ0FBQztJQUNoQyxDQUFDO2lGQVRVLGdCQUFnQix1QkFHakIsTUFBTTtvRUFITCxnQkFBZ0I7WUNkN0IsaUNBSUM7WUFGQyx1R0FBYyxvQkFBZ0IsSUFBQztZQUcvQixnQ0FBVTtZQUFBLHFCQUFLO1lBQUEsaUJBQVcsRUFBQTs7O1NEU2YsZ0JBQWdCO3VGQUFoQixnQkFBZ0I7Y0FQNUIsU0FBUzsyQkFDUyxlQUFlLG1CQUdmLHVCQUF1QixDQUFDLE1BQU0sUUFDOUIsRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFOztzQkFLeEMsTUFBTTt1QkFBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgSW5qZWN0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAgICAgICAgJ3J4YXAtc2lnbi1vdXQnLFxuICB0ZW1wbGF0ZVVybDogICAgICcuL3NpZ24tb3V0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiAgICAgICBbICcuL3NpZ24tb3V0LmNvbXBvbmVudC5zY3NzJyBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaG9zdDogICAgICAgICAgICB7IGNsYXNzOiAncnhhcC1zaWduLW91dCcgfVxufSlcbmV4cG9ydCBjbGFzcyBTaWduT3V0Q29tcG9uZW50IHtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KFJvdXRlcilcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlcjogUm91dGVyXG4gICkge31cblxuICBwdWJsaWMgcmVkaXJlY3RUb1Jvb3QoKSB7XG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWyAnLycgXSk7XG4gIH1cblxufVxuIiwiPGJ1dHRvblxuICByeGFwU2lnbk91dFxuICAoc3VjY2Vzc2Z1bCk9XCJyZWRpcmVjdFRvUm9vdCgpXCJcbiAgbWF0LWljb24tYnV0dG9uXG4+XG4gIDxtYXQtaWNvbj5sb2dpbjwvbWF0LWljb24+XG48L2J1dHRvbj5cbiJdfQ==
|
|
19
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: SignOutComponent, decorators: [{
|
|
20
|
+
type: Component,
|
|
21
|
+
args: [{ selector: 'rxap-sign-out', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [MatButtonModule, MatIconModule], template: "<button\n mat-icon-button\n (click)=\"logout()\"\n>\n <mat-icon>login</mat-icon>\n</button>\n" }]
|
|
22
|
+
}], ctorParameters: function () { return [{ type: i1.RxapAuthenticationService }]; } });
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbi1vdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYW5ndWxhci9sYXlvdXQvc3JjL2xpYi9oZWFkZXIvc2lnbi1vdXQvc2lnbi1vdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYW5ndWxhci9sYXlvdXQvc3JjL2xpYi9oZWFkZXIvc2lnbi1vdXQvc2lnbi1vdXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDakUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7QUFVM0QsTUFBTSxPQUFPLGdCQUFnQjtJQUUzQixZQUNtQixxQkFBZ0Q7UUFBaEQsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUEyQjtJQUVuRSxDQUFDO0lBRU0sS0FBSyxDQUFDLE1BQU07UUFDakIsTUFBTSxJQUFJLENBQUMscUJBQXFCLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDN0MsQ0FBQzs4R0FUVSxnQkFBZ0I7a0dBQWhCLGdCQUFnQix5RUNoQjdCLGtHQU1BLHlERFFhLGVBQWUsMkxBQUUsYUFBYTs7MkZBRTlCLGdCQUFnQjtrQkFSNUIsU0FBUzsrQkFDRSxlQUFlLG1CQUdSLHVCQUF1QixDQUFDLE1BQU0sY0FDbkMsSUFBSSxXQUNQLENBQUUsZUFBZSxFQUFFLGFBQWEsQ0FBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUnhhcEF1dGhlbnRpY2F0aW9uU2VydmljZSB9IGZyb20gJ0ByeGFwL2F1dGhlbnRpY2F0aW9uJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3J4YXAtc2lnbi1vdXQnLFxuICB0ZW1wbGF0ZVVybDogJy4vc2lnbi1vdXQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsgJy4vc2lnbi1vdXQuY29tcG9uZW50LnNjc3MnIF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbIE1hdEJ1dHRvbk1vZHVsZSwgTWF0SWNvbk1vZHVsZSBdLFxufSlcbmV4cG9ydCBjbGFzcyBTaWduT3V0Q29tcG9uZW50IHtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGF1dGhlbnRpY2F0aW9uU2VydmljZTogUnhhcEF1dGhlbnRpY2F0aW9uU2VydmljZSxcbiAgKSB7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgbG9nb3V0KCkge1xuICAgIGF3YWl0IHRoaXMuYXV0aGVudGljYXRpb25TZXJ2aWNlLnNpZ25PdXQoKTtcbiAgfVxuXG59XG4iLCI8YnV0dG9uXG4gIG1hdC1pY29uLWJ1dHRvblxuICAoY2xpY2spPVwibG9nb3V0KClcIlxuPlxuICA8bWF0LWljb24+bG9naW48L21hdC1pY29uPlxuPC9idXR0b24+XG4iXX0=
|
|
@@ -1,112 +1,42 @@
|
|
|
1
|
-
import { Component,
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
1
|
+
import { ChangeDetectionStrategy, Component, signal, } from '@angular/core';
|
|
2
|
+
import { RxapAuthenticationService, RxapUserProfileService, } from '@rxap/authentication';
|
|
3
|
+
import { filter, } from 'rxjs';
|
|
4
|
+
import { switchMap, tap, } from 'rxjs/operators';
|
|
5
|
+
import { AsyncPipe, NgIf, } from '@angular/common';
|
|
6
|
+
import { MatIconModule } from '@angular/material/icon';
|
|
7
|
+
import { MatMenuModule } from '@angular/material/menu';
|
|
8
|
+
import { FlexModule } from '@angular/flex-layout/flex';
|
|
5
9
|
import * as i0 from "@angular/core";
|
|
6
|
-
import * as i1 from "@
|
|
7
|
-
import * as i2 from "@angular/
|
|
8
|
-
import * as i3 from "@angular/
|
|
9
|
-
import * as i4 from "@angular/
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
i0.ɵɵelementEnd();
|
|
16
|
-
i0.ɵɵelementStart(3, "span");
|
|
17
|
-
i0.ɵɵtext(4);
|
|
18
|
-
i0.ɵɵelementEnd()();
|
|
19
|
-
} if (rf & 2) {
|
|
20
|
-
const user_r2 = i0.ɵɵnextContext().$implicit;
|
|
21
|
-
i0.ɵɵadvance(4);
|
|
22
|
-
i0.ɵɵtextInterpolate2("", user_r2.firstname, " ", user_r2.lastname, "");
|
|
23
|
-
} }
|
|
24
|
-
function UserProfileIconComponent_ng_template_5_button_1_Template(rf, ctx) { if (rf & 1) {
|
|
25
|
-
i0.ɵɵelementStart(0, "button", 5)(1, "mat-icon");
|
|
26
|
-
i0.ɵɵtext(2, "person");
|
|
27
|
-
i0.ɵɵelementEnd();
|
|
28
|
-
i0.ɵɵelementStart(3, "span");
|
|
29
|
-
i0.ɵɵtext(4);
|
|
30
|
-
i0.ɵɵelementEnd()();
|
|
31
|
-
} if (rf & 2) {
|
|
32
|
-
const user_r2 = i0.ɵɵnextContext().$implicit;
|
|
33
|
-
i0.ɵɵadvance(4);
|
|
34
|
-
i0.ɵɵtextInterpolate(user_r2.name);
|
|
35
|
-
} }
|
|
36
|
-
function UserProfileIconComponent_ng_template_5_button_2_Template(rf, ctx) { if (rf & 1) {
|
|
37
|
-
i0.ɵɵelementStart(0, "button", 5)(1, "mat-icon");
|
|
38
|
-
i0.ɵɵtext(2, "account_circle");
|
|
39
|
-
i0.ɵɵelementEnd();
|
|
40
|
-
i0.ɵɵelementStart(3, "span");
|
|
41
|
-
i0.ɵɵtext(4);
|
|
42
|
-
i0.ɵɵelementEnd()();
|
|
43
|
-
} if (rf & 2) {
|
|
44
|
-
const user_r2 = i0.ɵɵnextContext().$implicit;
|
|
45
|
-
i0.ɵɵadvance(4);
|
|
46
|
-
i0.ɵɵtextInterpolate(user_r2.username);
|
|
47
|
-
} }
|
|
48
|
-
function UserProfileIconComponent_ng_template_5_button_3_Template(rf, ctx) { if (rf & 1) {
|
|
49
|
-
i0.ɵɵelementStart(0, "button", 5)(1, "mat-icon");
|
|
50
|
-
i0.ɵɵtext(2, "email");
|
|
51
|
-
i0.ɵɵelementEnd();
|
|
52
|
-
i0.ɵɵelementStart(3, "span");
|
|
53
|
-
i0.ɵɵtext(4);
|
|
54
|
-
i0.ɵɵelementEnd()();
|
|
55
|
-
} if (rf & 2) {
|
|
56
|
-
const user_r2 = i0.ɵɵnextContext().$implicit;
|
|
57
|
-
i0.ɵɵadvance(4);
|
|
58
|
-
i0.ɵɵtextInterpolate(user_r2.email);
|
|
59
|
-
} }
|
|
60
|
-
function UserProfileIconComponent_ng_template_5_Template(rf, ctx) { if (rf & 1) {
|
|
61
|
-
i0.ɵɵtemplate(0, UserProfileIconComponent_ng_template_5_button_0_Template, 5, 2, "button", 4);
|
|
62
|
-
i0.ɵɵtemplate(1, UserProfileIconComponent_ng_template_5_button_1_Template, 5, 1, "button", 4);
|
|
63
|
-
i0.ɵɵtemplate(2, UserProfileIconComponent_ng_template_5_button_2_Template, 5, 1, "button", 4);
|
|
64
|
-
i0.ɵɵtemplate(3, UserProfileIconComponent_ng_template_5_button_3_Template, 5, 1, "button", 4);
|
|
65
|
-
} if (rf & 2) {
|
|
66
|
-
const user_r2 = ctx.$implicit;
|
|
67
|
-
i0.ɵɵproperty("ngIf", user_r2.firstname && user_r2.lastname);
|
|
68
|
-
i0.ɵɵadvance(1);
|
|
69
|
-
i0.ɵɵproperty("ngIf", user_r2.name);
|
|
70
|
-
i0.ɵɵadvance(1);
|
|
71
|
-
i0.ɵɵproperty("ngIf", user_r2.username);
|
|
72
|
-
i0.ɵɵadvance(1);
|
|
73
|
-
i0.ɵɵproperty("ngIf", user_r2.email);
|
|
74
|
-
} }
|
|
75
|
-
class UserProfileIconComponent {
|
|
76
|
-
constructor(userService) {
|
|
77
|
-
this.userService = userService;
|
|
78
|
-
this.userProfileUrl$ = this.userService.user$.pipe(isDefined(), map((user) => user.photoURL ?? user.avatarUrl));
|
|
79
|
-
this.userName$ = this.userService.user$.pipe(isDefined(), map((user) => user.name ??
|
|
80
|
-
(user.firstname || user.lastname
|
|
81
|
-
? [user.firstname, user.lastname].join(' ').trim()
|
|
82
|
-
: null) ??
|
|
83
|
-
user.username));
|
|
10
|
+
import * as i1 from "@rxap/authentication";
|
|
11
|
+
import * as i2 from "@angular/flex-layout/flex";
|
|
12
|
+
import * as i3 from "@angular/material/menu";
|
|
13
|
+
import * as i4 from "@angular/material/icon";
|
|
14
|
+
export class UserProfileIconComponent {
|
|
15
|
+
constructor(userProfileService, authenticationService) {
|
|
16
|
+
this.userProfileService = userProfileService;
|
|
17
|
+
this.authenticationService = authenticationService;
|
|
18
|
+
this.username = signal(null);
|
|
84
19
|
}
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
let tmp_2_0;
|
|
97
|
-
i0.ɵɵproperty("matMenuTriggerFor", _r0)("rxapAvatarBackgroundImage", i0.ɵɵpipeBind1(1, 5, ctx.userProfileUrl$))("name", (tmp_2_0 = i0.ɵɵpipeBind1(2, 7, ctx.userName$)) !== null && tmp_2_0 !== undefined ? tmp_2_0 : "");
|
|
98
|
-
i0.ɵɵadvance(3);
|
|
99
|
-
i0.ɵɵproperty("yPosition", "below");
|
|
100
|
-
i0.ɵɵadvance(2);
|
|
101
|
-
i0.ɵɵproperty("ngIf", i0.ɵɵpipeBind1(6, 9, ctx.userService.user$));
|
|
102
|
-
} }, dependencies: [i1.MatLegacyMenu, i1.MatLegacyMenuItem, i1.MatLegacyMenuTrigger, i2.MatIcon, i3.NgIf, i4.DefaultLayoutDirective, i4.DefaultLayoutAlignDirective, i5.AvatarBackgroundImageDirective, i3.AsyncPipe], styles: [".profile-icon[_ngcontent-%COMP%]{border-radius:100%;border:none;height:32px;width:32px;overflow:hidden;background-position:center center;background-repeat:no-repeat;background-size:cover}.profile-icon[_ngcontent-%COMP%]:hover{cursor:pointer}.profile-icon[_ngcontent-%COMP%]:focus{outline:none}"], changeDetection: 0 }); }
|
|
20
|
+
ngOnInit() {
|
|
21
|
+
this._subscription = this.authenticationService.isAuthenticated$.pipe(filter(Boolean), switchMap(() => this.userProfileService.getProfile()), filter(Boolean), tap((user) => this.username.set(user.username ?? null))).subscribe();
|
|
22
|
+
}
|
|
23
|
+
ngOnDestroy() {
|
|
24
|
+
this._subscription?.unsubscribe();
|
|
25
|
+
}
|
|
26
|
+
async logout() {
|
|
27
|
+
await this.authenticationService.signOut();
|
|
28
|
+
}
|
|
29
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: UserProfileIconComponent, deps: [{ token: i1.RxapUserProfileService }, { token: i1.RxapAuthenticationService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
30
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.4", type: UserProfileIconComponent, isStandalone: true, selector: "rxap-user-profile-icon", ngImport: i0, template: "<button [matMenuTriggerFor]=\"menu\"\n [disabled]=\"!username()\"\n class=\"profile-icon\"\n fxLayout=\"row\"\n fxLayoutAlign=\"center center\">\n <mat-icon class=\"avatar-icon\">account_circle</mat-icon>\n</button>\n\n<mat-menu #menu=\"matMenu\" [yPosition]=\"'below'\">\n <button mat-menu-item>\n <mat-icon>account_circle</mat-icon>\n <span>{{username()}}</span>\n </button>\n <button (click)=\"logout()\" mat-menu-item>\n <mat-icon>login</mat-icon>\n <span i18n>Logout</span>\n </button>\n</mat-menu>\n", styles: [".profile-icon{border-radius:100%;border:none;height:32px;width:32px;overflow:hidden;background-position:center center;background-repeat:no-repeat;background-size:cover}.profile-icon .avatar-icon{width:32px;height:32px;font-size:32px}.profile-icon:hover{cursor:pointer}.profile-icon:focus{outline:none}\n"], dependencies: [{ kind: "ngmodule", type: FlexModule }, { kind: "directive", type: i2.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i2.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i3.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i3.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i3.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
103
31
|
}
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
32
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: UserProfileIconComponent, decorators: [{
|
|
33
|
+
type: Component,
|
|
34
|
+
args: [{ selector: 'rxap-user-profile-icon', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
|
|
35
|
+
FlexModule,
|
|
36
|
+
MatMenuModule,
|
|
37
|
+
MatIconModule,
|
|
38
|
+
NgIf,
|
|
39
|
+
AsyncPipe,
|
|
40
|
+
], template: "<button [matMenuTriggerFor]=\"menu\"\n [disabled]=\"!username()\"\n class=\"profile-icon\"\n fxLayout=\"row\"\n fxLayoutAlign=\"center center\">\n <mat-icon class=\"avatar-icon\">account_circle</mat-icon>\n</button>\n\n<mat-menu #menu=\"matMenu\" [yPosition]=\"'below'\">\n <button mat-menu-item>\n <mat-icon>account_circle</mat-icon>\n <span>{{username()}}</span>\n </button>\n <button (click)=\"logout()\" mat-menu-item>\n <mat-icon>login</mat-icon>\n <span i18n>Logout</span>\n </button>\n</mat-menu>\n", styles: [".profile-icon{border-radius:100%;border:none;height:32px;width:32px;overflow:hidden;background-position:center center;background-repeat:no-repeat;background-size:cover}.profile-icon .avatar-icon{width:32px;height:32px;font-size:32px}.profile-icon:hover{cursor:pointer}.profile-icon:focus{outline:none}\n"] }]
|
|
41
|
+
}], ctorParameters: function () { return [{ type: i1.RxapUserProfileService }, { type: i1.RxapAuthenticationService }]; } });
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1wcm9maWxlLWljb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYW5ndWxhci9sYXlvdXQvc3JjL2xpYi9oZWFkZXIvdXNlci1wcm9maWxlLWljb24vdXNlci1wcm9maWxlLWljb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYW5ndWxhci9sYXlvdXQvc3JjL2xpYi9oZWFkZXIvdXNlci1wcm9maWxlLWljb24vdXNlci1wcm9maWxlLWljb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBR1QsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCx5QkFBeUIsRUFDekIsc0JBQXNCLEdBQ3ZCLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUNMLE1BQU0sR0FFUCxNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFDTCxTQUFTLEVBQ1QsR0FBRyxHQUNKLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUNMLFNBQVMsRUFDVCxJQUFJLEdBQ0wsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7Ozs7O0FBZ0J2RCxNQUFNLE9BQU8sd0JBQXdCO0lBTW5DLFlBQ21CLGtCQUEwQyxFQUMxQyxxQkFBZ0Q7UUFEaEQsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUF3QjtRQUMxQywwQkFBcUIsR0FBckIscUJBQXFCLENBQTJCO1FBTjVELGFBQVEsR0FBRyxNQUFNLENBQWdCLElBQUksQ0FBQyxDQUFDO0lBTzNDLENBQUM7SUFFSixRQUFRO1FBQ04sSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUNuRSxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQ2YsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxFQUNyRCxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQ2YsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQ3hELENBQUMsU0FBUyxFQUFFLENBQUM7SUFDaEIsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsYUFBYSxFQUFFLFdBQVcsRUFBRSxDQUFDO0lBQ3BDLENBQUM7SUFFTSxLQUFLLENBQUMsTUFBTTtRQUNqQixNQUFNLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUM3QyxDQUFDOzhHQTFCVSx3QkFBd0I7a0dBQXhCLHdCQUF3QixrRkN6Q3JDLHdpQkFrQkEsd1dEZ0JJLFVBQVUsaXZDQUNWLGFBQWEsK1lBQ2IsYUFBYTs7MkZBS0osd0JBQXdCO2tCQWRwQyxTQUFTOytCQUNFLHdCQUF3QixtQkFHakIsdUJBQXVCLENBQUMsTUFBTSxjQUNuQyxJQUFJLFdBQ1A7d0JBQ1AsVUFBVTt3QkFDVixhQUFhO3dCQUNiLGFBQWE7d0JBQ2IsSUFBSTt3QkFDSixTQUFTO3FCQUNWIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIHNpZ25hbCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBSeGFwQXV0aGVudGljYXRpb25TZXJ2aWNlLFxuICBSeGFwVXNlclByb2ZpbGVTZXJ2aWNlLFxufSBmcm9tICdAcnhhcC9hdXRoZW50aWNhdGlvbic7XG5pbXBvcnQge1xuICBmaWx0ZXIsXG4gIFN1YnNjcmlwdGlvbixcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBzd2l0Y2hNYXAsXG4gIHRhcCxcbn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtcbiAgQXN5bmNQaXBlLFxuICBOZ0lmLFxufSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgTWF0TWVudU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL21lbnUnO1xuaW1wb3J0IHsgRmxleE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2ZsZXgtbGF5b3V0L2ZsZXgnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdyeGFwLXVzZXItcHJvZmlsZS1pY29uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3VzZXItcHJvZmlsZS1pY29uLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbICcuL3VzZXItcHJvZmlsZS1pY29uLmNvbXBvbmVudC5zY3NzJyBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIEZsZXhNb2R1bGUsXG4gICAgTWF0TWVudU1vZHVsZSxcbiAgICBNYXRJY29uTW9kdWxlLFxuICAgIE5nSWYsXG4gICAgQXN5bmNQaXBlLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBVc2VyUHJvZmlsZUljb25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgcHVibGljIHVzZXJuYW1lID0gc2lnbmFsPG51bGwgfCBzdHJpbmc+KG51bGwpO1xuXG4gIHByaXZhdGUgX3N1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHVzZXJQcm9maWxlU2VydmljZTogUnhhcFVzZXJQcm9maWxlU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGF1dGhlbnRpY2F0aW9uU2VydmljZTogUnhhcEF1dGhlbnRpY2F0aW9uU2VydmljZSxcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbiA9IHRoaXMuYXV0aGVudGljYXRpb25TZXJ2aWNlLmlzQXV0aGVudGljYXRlZCQucGlwZShcbiAgICAgIGZpbHRlcihCb29sZWFuKSxcbiAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLnVzZXJQcm9maWxlU2VydmljZS5nZXRQcm9maWxlKCkpLFxuICAgICAgZmlsdGVyKEJvb2xlYW4pLFxuICAgICAgdGFwKCh1c2VyKSA9PiB0aGlzLnVzZXJuYW1lLnNldCh1c2VyLnVzZXJuYW1lID8/IG51bGwpKSxcbiAgICApLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGxvZ291dCgpIHtcbiAgICBhd2FpdCB0aGlzLmF1dGhlbnRpY2F0aW9uU2VydmljZS5zaWduT3V0KCk7XG4gIH1cblxuXG59XG4iLCI8YnV0dG9uIFttYXRNZW51VHJpZ2dlckZvcl09XCJtZW51XCJcbiAgICAgICAgW2Rpc2FibGVkXT1cIiF1c2VybmFtZSgpXCJcbiAgICAgICAgY2xhc3M9XCJwcm9maWxlLWljb25cIlxuICAgICAgICBmeExheW91dD1cInJvd1wiXG4gICAgICAgIGZ4TGF5b3V0QWxpZ249XCJjZW50ZXIgY2VudGVyXCI+XG4gIDxtYXQtaWNvbiBjbGFzcz1cImF2YXRhci1pY29uXCI+YWNjb3VudF9jaXJjbGU8L21hdC1pY29uPlxuPC9idXR0b24+XG5cbjxtYXQtbWVudSAjbWVudT1cIm1hdE1lbnVcIiBbeVBvc2l0aW9uXT1cIidiZWxvdydcIj5cbiAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtPlxuICAgIDxtYXQtaWNvbj5hY2NvdW50X2NpcmNsZTwvbWF0LWljb24+XG4gICAgPHNwYW4+e3t1c2VybmFtZSgpfX08L3NwYW4+XG4gIDwvYnV0dG9uPlxuICA8YnV0dG9uIChjbGljayk9XCJsb2dvdXQoKVwiIG1hdC1tZW51LWl0ZW0+XG4gICAgPG1hdC1pY29uPmxvZ2luPC9tYXQtaWNvbj5cbiAgICA8c3BhbiBpMThuPkxvZ291dDwvc3Bhbj5cbiAgPC9idXR0b24+XG48L21hdC1tZW51PlxuIl19
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { Inject, Injectable, LOCALE_ID, } from '@angular/core';
|
|
2
|
+
import { ConfigService } from '@rxap/config';
|
|
3
|
+
import { I18nService } from './i18n.service';
|
|
4
|
+
import { RxapUserProfileService } from '@rxap/authentication';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "@rxap/config";
|
|
7
|
+
import * as i2 from "./i18n.service";
|
|
8
|
+
import * as i3 from "@rxap/authentication";
|
|
9
|
+
export class I18nCheckGuard {
|
|
10
|
+
constructor(config, localId, i18nService, userProfileService) {
|
|
11
|
+
this.config = config;
|
|
12
|
+
this.localId = localId;
|
|
13
|
+
this.i18nService = i18nService;
|
|
14
|
+
this.userProfileService = userProfileService;
|
|
15
|
+
}
|
|
16
|
+
async canActivate() {
|
|
17
|
+
const selectedLanguage = (await this.userProfileService.getLanguage()) ?? 'en';
|
|
18
|
+
if (this.i18nService.currentLanguage !== selectedLanguage) {
|
|
19
|
+
await this.i18nService.redirect(selectedLanguage);
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
return true;
|
|
23
|
+
}
|
|
24
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: I18nCheckGuard, deps: [{ token: i1.ConfigService }, { token: LOCALE_ID }, { token: i2.I18nService }, { token: i3.RxapUserProfileService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
25
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: I18nCheckGuard, providedIn: 'root' }); }
|
|
26
|
+
}
|
|
27
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: I18nCheckGuard, decorators: [{
|
|
28
|
+
type: Injectable,
|
|
29
|
+
args: [{ providedIn: 'root' }]
|
|
30
|
+
}], ctorParameters: function () { return [{ type: i1.ConfigService }, { type: undefined, decorators: [{
|
|
31
|
+
type: Inject,
|
|
32
|
+
args: [LOCALE_ID]
|
|
33
|
+
}] }, { type: i2.I18nService }, { type: i3.RxapUserProfileService }]; } });
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaTE4bi1jaGVjay5ndWFyZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2FuZ3VsYXIvbGF5b3V0L3NyYy9saWIvaTE4bi1jaGVjay5ndWFyZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsTUFBTSxFQUNOLFVBQVUsRUFDVixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM3QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7Ozs7O0FBRzlELE1BQU0sT0FBTyxjQUFjO0lBRXpCLFlBQ21CLE1BQXFCLEVBRXJCLE9BQWUsRUFDZixXQUF3QixFQUN4QixrQkFBMEM7UUFKMUMsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQUVyQixZQUFPLEdBQVAsT0FBTyxDQUFRO1FBQ2YsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUF3QjtJQUU3RCxDQUFDO0lBRUQsS0FBSyxDQUFDLFdBQVc7UUFDZixNQUFNLGdCQUFnQixHQUFHLENBQUMsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUM7UUFDL0UsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsS0FBSyxnQkFBZ0IsRUFBRTtZQUN6RCxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDbEQsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQzs4R0FsQlUsY0FBYywrQ0FJZixTQUFTO2tIQUpSLGNBQWMsY0FERCxNQUFNOzsyRkFDbkIsY0FBYztrQkFEMUIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUU7OzBCQUs3QixNQUFNOzJCQUFDLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBJbmplY3QsXG4gIEluamVjdGFibGUsXG4gIExPQ0FMRV9JRCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb25maWdTZXJ2aWNlIH0gZnJvbSAnQHJ4YXAvY29uZmlnJztcbmltcG9ydCB7IEkxOG5TZXJ2aWNlIH0gZnJvbSAnLi9pMThuLnNlcnZpY2UnO1xuaW1wb3J0IHsgUnhhcFVzZXJQcm9maWxlU2VydmljZSB9IGZyb20gJ0ByeGFwL2F1dGhlbnRpY2F0aW9uJztcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBJMThuQ2hlY2tHdWFyZCB7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb25maWc6IENvbmZpZ1NlcnZpY2UsXG4gICAgQEluamVjdChMT0NBTEVfSUQpXG4gICAgcHJpdmF0ZSByZWFkb25seSBsb2NhbElkOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSByZWFkb25seSBpMThuU2VydmljZTogSTE4blNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSB1c2VyUHJvZmlsZVNlcnZpY2U6IFJ4YXBVc2VyUHJvZmlsZVNlcnZpY2UsXG4gICkge1xuICB9XG5cbiAgYXN5bmMgY2FuQWN0aXZhdGUoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3Qgc2VsZWN0ZWRMYW5ndWFnZSA9IChhd2FpdCB0aGlzLnVzZXJQcm9maWxlU2VydmljZS5nZXRMYW5ndWFnZSgpKSA/PyAnZW4nO1xuICAgIGlmICh0aGlzLmkxOG5TZXJ2aWNlLmN1cnJlbnRMYW5ndWFnZSAhPT0gc2VsZWN0ZWRMYW5ndWFnZSkge1xuICAgICAgYXdhaXQgdGhpcy5pMThuU2VydmljZS5yZWRpcmVjdChzZWxlY3RlZExhbmd1YWdlKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxufVxuIl19
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { Inject, Injectable, LOCALE_ID, } from '@angular/core';
|
|
2
|
+
import { RxapUserProfileService } from '@rxap/authentication';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@rxap/authentication";
|
|
5
|
+
export class I18nService {
|
|
6
|
+
constructor(localId, userProfileService) {
|
|
7
|
+
this.localId = localId;
|
|
8
|
+
this.userProfileService = userProfileService;
|
|
9
|
+
this.currentLanguage = this.localId.replace(/-[A-Z]+$/, '');
|
|
10
|
+
}
|
|
11
|
+
async setLanguage(language) {
|
|
12
|
+
await this.userProfileService.setLanguage(language);
|
|
13
|
+
this.redirect(language);
|
|
14
|
+
}
|
|
15
|
+
redirect(next, current = this.currentLanguage) {
|
|
16
|
+
if (current === next) {
|
|
17
|
+
console.warn('[I18nService] redirect not required - language unchanged');
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
const redirectUrl = location.origin +
|
|
21
|
+
location.pathname.replace(new RegExp(`^/${current}`), `/${next}`) +
|
|
22
|
+
location.search;
|
|
23
|
+
console.log('[I18nService] redirect to: ' + redirectUrl);
|
|
24
|
+
location.replace(redirectUrl);
|
|
25
|
+
}
|
|
26
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: I18nService, deps: [{ token: LOCALE_ID }, { token: i1.RxapUserProfileService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
27
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: I18nService, providedIn: 'root' }); }
|
|
28
|
+
}
|
|
29
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: I18nService, decorators: [{
|
|
30
|
+
type: Injectable,
|
|
31
|
+
args: [{ providedIn: 'root' }]
|
|
32
|
+
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
33
|
+
type: Inject,
|
|
34
|
+
args: [LOCALE_ID]
|
|
35
|
+
}] }, { type: i1.RxapUserProfileService }]; } });
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaTE4bi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYW5ndWxhci9sYXlvdXQvc3JjL2xpYi9pMThuLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLE1BQU0sRUFDTixVQUFVLEVBQ1YsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7QUFHOUQsTUFBTSxPQUFPLFdBQVc7SUFJdEIsWUFFbUIsT0FBZSxFQUNmLGtCQUEwQztRQUQxQyxZQUFPLEdBQVAsT0FBTyxDQUFRO1FBQ2YsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUF3QjtRQUUzRCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRU0sS0FBSyxDQUFDLFdBQVcsQ0FBQyxRQUFnQjtRQUN2QyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBRU0sUUFBUSxDQUFDLElBQVksRUFBRSxVQUFrQixJQUFJLENBQUMsZUFBZTtRQUNsRSxJQUFJLE9BQU8sS0FBSyxJQUFJLEVBQUU7WUFDcEIsT0FBTyxDQUFDLElBQUksQ0FBQywwREFBMEQsQ0FBQyxDQUFDO1lBQ3pFLE9BQU87U0FDUjtRQUNELE1BQU0sV0FBVyxHQUNmLFFBQVEsQ0FBQyxNQUFNO1lBQ2YsUUFBUSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxNQUFNLENBQUMsS0FBTSxPQUFRLEVBQUUsQ0FBQyxFQUFFLElBQUssSUFBSyxFQUFFLENBQUM7WUFDckUsUUFBUSxDQUFDLE1BQU0sQ0FBQztRQUNsQixPQUFPLENBQUMsR0FBRyxDQUFDLDZCQUE2QixHQUFHLFdBQVcsQ0FBQyxDQUFDO1FBQ3pELFFBQVEsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDaEMsQ0FBQzs4R0E1QlUsV0FBVyxrQkFLWixTQUFTO2tIQUxSLFdBQVcsY0FERSxNQUFNOzsyRkFDbkIsV0FBVztrQkFEdkIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUU7OzBCQU03QixNQUFNOzJCQUFDLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBJbmplY3QsXG4gIEluamVjdGFibGUsXG4gIExPQ0FMRV9JRCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSeGFwVXNlclByb2ZpbGVTZXJ2aWNlIH0gZnJvbSAnQHJ4YXAvYXV0aGVudGljYXRpb24nO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIEkxOG5TZXJ2aWNlIHtcblxuICBwdWJsaWMgcmVhZG9ubHkgY3VycmVudExhbmd1YWdlOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChMT0NBTEVfSUQpXG4gICAgcHJpdmF0ZSByZWFkb25seSBsb2NhbElkOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSByZWFkb25seSB1c2VyUHJvZmlsZVNlcnZpY2U6IFJ4YXBVc2VyUHJvZmlsZVNlcnZpY2UsXG4gICkge1xuICAgIHRoaXMuY3VycmVudExhbmd1YWdlID0gdGhpcy5sb2NhbElkLnJlcGxhY2UoLy1bQS1aXSskLywgJycpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHNldExhbmd1YWdlKGxhbmd1YWdlOiBzdHJpbmcpIHtcbiAgICBhd2FpdCB0aGlzLnVzZXJQcm9maWxlU2VydmljZS5zZXRMYW5ndWFnZShsYW5ndWFnZSk7XG4gICAgdGhpcy5yZWRpcmVjdChsYW5ndWFnZSk7XG4gIH1cblxuICBwdWJsaWMgcmVkaXJlY3QobmV4dDogc3RyaW5nLCBjdXJyZW50OiBzdHJpbmcgPSB0aGlzLmN1cnJlbnRMYW5ndWFnZSkge1xuICAgIGlmIChjdXJyZW50ID09PSBuZXh0KSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tJMThuU2VydmljZV0gcmVkaXJlY3Qgbm90IHJlcXVpcmVkIC0gbGFuZ3VhZ2UgdW5jaGFuZ2VkJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHJlZGlyZWN0VXJsID1cbiAgICAgIGxvY2F0aW9uLm9yaWdpbiArXG4gICAgICBsb2NhdGlvbi5wYXRobmFtZS5yZXBsYWNlKG5ldyBSZWdFeHAoYF4vJHsgY3VycmVudCB9YCksIGAvJHsgbmV4dCB9YCkgK1xuICAgICAgbG9jYXRpb24uc2VhcmNoO1xuICAgIGNvbnNvbGUubG9nKCdbSTE4blNlcnZpY2VdIHJlZGlyZWN0IHRvOiAnICsgcmVkaXJlY3RVcmwpO1xuICAgIGxvY2F0aW9uLnJlcGxhY2UocmVkaXJlY3RVcmwpO1xuICB9XG5cbn1cbiJdfQ==
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { Inject, Injectable, LOCALE_ID, } from '@angular/core';
|
|
2
|
+
import { ConfigService } from '@rxap/config';
|
|
3
|
+
import { I18nService } from './i18n.service';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "@rxap/config";
|
|
6
|
+
import * as i2 from "./i18n.service";
|
|
7
|
+
export class LanguageSelectorService {
|
|
8
|
+
constructor(config, localId, i18nService) {
|
|
9
|
+
this.config = config;
|
|
10
|
+
this.localId = localId;
|
|
11
|
+
this.i18nService = i18nService;
|
|
12
|
+
this.languages = this.config.get('i18n.languages') ?? {};
|
|
13
|
+
this.defaultLanguage =
|
|
14
|
+
this.config.get('i18n.defaultLanguage') ??
|
|
15
|
+
Object.keys(this.languages)[0] ??
|
|
16
|
+
'en';
|
|
17
|
+
this.selectedLanguage = this.i18nService.currentLanguage;
|
|
18
|
+
}
|
|
19
|
+
async setLanguage(language) {
|
|
20
|
+
if (language !== this.i18nService.currentLanguage) {
|
|
21
|
+
await this.i18nService.setLanguage(language);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: LanguageSelectorService, deps: [{ token: i1.ConfigService }, { token: LOCALE_ID }, { token: i2.I18nService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
25
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: LanguageSelectorService, providedIn: 'root' }); }
|
|
26
|
+
}
|
|
27
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: LanguageSelectorService, decorators: [{
|
|
28
|
+
type: Injectable,
|
|
29
|
+
args: [{ providedIn: 'root' }]
|
|
30
|
+
}], ctorParameters: function () { return [{ type: i1.ConfigService }, { type: undefined, decorators: [{
|
|
31
|
+
type: Inject,
|
|
32
|
+
args: [LOCALE_ID]
|
|
33
|
+
}] }, { type: i2.I18nService }]; } });
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFuZ3VhZ2Utc2VsZWN0b3Iuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2FuZ3VsYXIvbGF5b3V0L3NyYy9saWIvbGFuZ3VhZ2Utc2VsZWN0b3Iuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsTUFBTSxFQUNOLFVBQVUsRUFDVixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM3QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7QUFHN0MsTUFBTSxPQUFPLHVCQUF1QjtJQUtsQyxZQUNtQixNQUFxQixFQUVyQixPQUFlLEVBQ2YsV0FBd0I7UUFIeEIsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQUVyQixZQUFPLEdBQVAsT0FBTyxDQUFRO1FBQ2YsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFFekMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBTSxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM5RCxJQUFJLENBQUMsZUFBZTtZQUNsQixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQztnQkFDdkMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM5QixJQUFJLENBQUM7UUFDUCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUM7SUFDM0QsQ0FBQztJQUVNLEtBQUssQ0FBQyxXQUFXLENBQUMsUUFBZ0I7UUFDdkMsSUFBSSxRQUFRLEtBQUssSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLEVBQUU7WUFDakQsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUM5QztJQUNILENBQUM7OEdBdkJVLHVCQUF1QiwrQ0FPeEIsU0FBUztrSEFQUix1QkFBdUIsY0FEVixNQUFNOzsyRkFDbkIsdUJBQXVCO2tCQURuQyxVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRTs7MEJBUTdCLE1BQU07MkJBQUMsU0FBUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEluamVjdCxcbiAgSW5qZWN0YWJsZSxcbiAgTE9DQUxFX0lELFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbmZpZ1NlcnZpY2UgfSBmcm9tICdAcnhhcC9jb25maWcnO1xuaW1wb3J0IHsgSTE4blNlcnZpY2UgfSBmcm9tICcuL2kxOG4uc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgTGFuZ3VhZ2VTZWxlY3RvclNlcnZpY2Uge1xuICBwdWJsaWMgcmVhZG9ubHkgbGFuZ3VhZ2VzOiBhbnk7XG4gIHB1YmxpYyByZWFkb25seSBkZWZhdWx0TGFuZ3VhZ2U6IHN0cmluZztcbiAgcHVibGljIHNlbGVjdGVkTGFuZ3VhZ2U6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZzogQ29uZmlnU2VydmljZSxcbiAgICBASW5qZWN0KExPQ0FMRV9JRClcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxvY2FsSWQ6IHN0cmluZyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGkxOG5TZXJ2aWNlOiBJMThuU2VydmljZSxcbiAgKSB7XG4gICAgdGhpcy5sYW5ndWFnZXMgPSB0aGlzLmNvbmZpZy5nZXQ8YW55PignaTE4bi5sYW5ndWFnZXMnKSA/PyB7fTtcbiAgICB0aGlzLmRlZmF1bHRMYW5ndWFnZSA9XG4gICAgICB0aGlzLmNvbmZpZy5nZXQoJ2kxOG4uZGVmYXVsdExhbmd1YWdlJykgPz9cbiAgICAgIE9iamVjdC5rZXlzKHRoaXMubGFuZ3VhZ2VzKVswXSA/P1xuICAgICAgJ2VuJztcbiAgICB0aGlzLnNlbGVjdGVkTGFuZ3VhZ2UgPSB0aGlzLmkxOG5TZXJ2aWNlLmN1cnJlbnRMYW5ndWFnZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzZXRMYW5ndWFnZShsYW5ndWFnZTogc3RyaW5nKSB7XG4gICAgaWYgKGxhbmd1YWdlICE9PSB0aGlzLmkxOG5TZXJ2aWNlLmN1cnJlbnRMYW5ndWFnZSkge1xuICAgICAgYXdhaXQgdGhpcy5pMThuU2VydmljZS5zZXRMYW5ndWFnZShsYW5ndWFnZSk7XG4gICAgfVxuICB9XG5cbn1cbiJdfQ==
|