Skip to content

Commit dfa8034

Browse files
committed
Synchronize language between shell and microfrontend
1 parent ffdc7ee commit dfa8034

File tree

4 files changed

+57
-3
lines changed

4 files changed

+57
-3
lines changed
Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,26 @@
11
import { Component, Input, OnChanges, SimpleChanges } from '@angular/core';
22
import { Router } from '@angular/router';
3+
import { TranslateService } from '@ngx-translate/core';
34

45
@Component({
56
template: '<mf-booking></mf-booking>',
67
})
78
export class EntryComponent implements OnChanges {
89
@Input() route?: string;
910

10-
constructor(private router: Router) {}
11+
@Input() language?: 'en' | 'de';
12+
13+
constructor(
14+
private router: Router,
15+
private translateService: TranslateService
16+
) {}
1117

1218
ngOnChanges(changes: SimpleChanges) {
1319
if (changes.route && this.route) {
1420
this.router.navigateByUrl(this.route, { state: { fromPlatform: true } });
1521
}
22+
if (changes.language && this.language) {
23+
this.translateService.use(this.language);
24+
}
1625
}
1726
}

projects/train-platform/src/micro-frontends/bookings-host.component.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,11 @@ import { Component } from '@angular/core';
22

33
@Component({
44
selector: 'app-bookings-host',
5-
template: ` <mf-bookings-entry microFrontendRouting></mf-bookings-entry> `,
5+
template: `
6+
<mf-bookings-entry
7+
microFrontendRouting
8+
microFrontendLanguage
9+
></mf-bookings-entry>
10+
`,
611
})
712
export class BookingsHostComponent {}

projects/train-platform/src/micro-frontends/bookings-host.module.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,15 @@ import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
22
import { RouterModule } from '@angular/router';
33
import { BookingsHostComponent } from './bookings-host.component';
44
import { LoadMicroFrontendGuard } from './load-micro-frontend.guard';
5+
import { MicroFrontendLanguageDirective } from './micro-frontend-language.directive';
56
import { MicroFrontendRoutingDirective } from './micro-frontend-routing.directive';
67

78
@NgModule({
8-
declarations: [BookingsHostComponent, MicroFrontendRoutingDirective],
9+
declarations: [
10+
BookingsHostComponent,
11+
MicroFrontendRoutingDirective,
12+
MicroFrontendLanguageDirective,
13+
],
914
imports: [
1015
RouterModule.forChild([
1116
{
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import { Directive, ElementRef, OnDestroy, OnInit } from '@angular/core';
2+
import { TranslateService } from '@ngx-translate/core';
3+
import { Subject } from 'rxjs';
4+
import { map, startWith, takeUntil } from 'rxjs/operators';
5+
6+
@Directive({
7+
// eslint-disable-next-line @angular-eslint/directive-selector
8+
selector: '[microFrontendLanguage]',
9+
})
10+
export class MicroFrontendLanguageDirective implements OnInit, OnDestroy {
11+
private destroyed$ = new Subject<void>();
12+
13+
constructor(
14+
private element: ElementRef,
15+
private translateService: TranslateService
16+
) {}
17+
18+
ngOnInit(): void {
19+
this.translateService.onLangChange
20+
.pipe(
21+
map((event) => event.lang),
22+
startWith(
23+
this.translateService.currentLang ?? this.translateService.defaultLang
24+
),
25+
takeUntil(this.destroyed$)
26+
)
27+
.subscribe((language) => {
28+
this.element.nativeElement.language = language;
29+
});
30+
}
31+
32+
ngOnDestroy(): void {
33+
this.destroyed$.next();
34+
}
35+
}

0 commit comments

Comments
 (0)