diff --git a/frontend/src/app/core/services/language.service.ts b/frontend/src/app/core/services/language.service.ts index 6bfbd14..9243c69 100644 --- a/frontend/src/app/core/services/language.service.ts +++ b/frontend/src/app/core/services/language.service.ts @@ -39,6 +39,7 @@ export class LanguageService { setForAuthenticatedUser(lang: AppLanguage) { const nextLang = this.read(lang) || 'pl'; + localStorage.setItem(this.key, nextLang); this.apply(nextLang); } diff --git a/frontend/src/app/shared/auth/auth-toolbar.component.html b/frontend/src/app/shared/auth/auth-toolbar.component.html index 20f5487..e1c311a 100644 --- a/frontend/src/app/shared/auth/auth-toolbar.component.html +++ b/frontend/src/app/shared/auth/auth-toolbar.component.html @@ -8,8 +8,15 @@ > diff --git a/frontend/src/app/shared/auth/auth-toolbar.component.ts b/frontend/src/app/shared/auth/auth-toolbar.component.ts index f9d8238..0a4965d 100644 --- a/frontend/src/app/shared/auth/auth-toolbar.component.ts +++ b/frontend/src/app/shared/auth/auth-toolbar.component.ts @@ -1,31 +1,28 @@ import { CommonModule } from '@angular/common'; import { Component, inject } from '@angular/core'; +import { FormsModule } from '@angular/forms'; import { ButtonModule } from 'primeng/button'; -import { AppLanguage, LanguageService } from '../../core/services/language.service'; +import { AppLanguage, AppLanguageOption, LanguageService } from '../../core/services/language.service'; import { ThemeService } from '../../core/services/theme.service'; @Component({ selector: 'app-auth-toolbar', standalone: true, - imports: [CommonModule, ButtonModule], + imports: [CommonModule, FormsModule, ButtonModule], templateUrl: './auth-toolbar.component.html' }) export class AuthToolbarComponent { readonly theme = inject(ThemeService); readonly language = inject(LanguageService); - get languageOptions() { - const current = this.language.current(); - return [ - { code: 'no', label: `${current === 'no' ? 'βœ“ ' : ''}πŸ‡³πŸ‡΄ Norsk` }, - { code: 'es', label: `${current === 'es' ? 'βœ“ ' : ''}πŸ‡ͺπŸ‡Έ EspaΓ±ol` }, - { code: 'pl', label: `${current === 'pl' ? 'βœ“ ' : ''}πŸ‡΅πŸ‡± Polski` }, - { code: 'en', label: `${current === 'en' ? 'βœ“ ' : ''}πŸ‡¬πŸ‡§ English` } - ]; + readonly languageOptions = this.language.options; + + trackByLanguageCode(_: number, option: AppLanguageOption) { + return option.code; } - changeLanguage(event: Event) { - this.language.set((event.target as HTMLSelectElement).value as AppLanguage); + changeLanguage(lang: AppLanguage | string) { + this.language.set(lang as AppLanguage); } } diff --git a/frontend/src/app/shared/layout/app-topbar.component.html b/frontend/src/app/shared/layout/app-topbar.component.html index 847db42..5895b0b 100644 --- a/frontend/src/app/shared/layout/app-topbar.component.html +++ b/frontend/src/app/shared/layout/app-topbar.component.html @@ -17,8 +17,15 @@ > diff --git a/frontend/src/app/shared/layout/app-topbar.component.ts b/frontend/src/app/shared/layout/app-topbar.component.ts index 2951703..05984a8 100644 --- a/frontend/src/app/shared/layout/app-topbar.component.ts +++ b/frontend/src/app/shared/layout/app-topbar.component.ts @@ -1,5 +1,6 @@ import { CommonModule } from '@angular/common'; import { Component, EventEmitter, Input, Output } from '@angular/core'; +import { FormsModule } from '@angular/forms'; import { TranslateModule } from '@ngx-translate/core'; import { AvatarModule } from 'primeng/avatar'; import { ButtonModule } from 'primeng/button'; @@ -13,7 +14,7 @@ export interface TopbarLanguageOption { @Component({ selector: 'app-topbar', standalone: true, - imports: [CommonModule, TranslateModule, ButtonModule, AvatarModule], + imports: [CommonModule, FormsModule, TranslateModule, ButtonModule, AvatarModule], templateUrl: './app-topbar.component.html' }) export class AppTopbarComponent { @@ -31,15 +32,11 @@ export class AppTopbarComponent { return this.username.slice(0, 2).toUpperCase(); } - get displayLanguages(): TopbarLanguageOption[] { - return this.languages.map((option) => ({ - ...option, - label: `${option.flag} ${option.label}${option.code === this.lang ? ' βœ“' : ''}` - })); + trackByLanguageCode(_: number, option: TopbarLanguageOption) { + return option.code; } - onLanguageSelect(event: Event) { - const value = (event.target as HTMLSelectElement).value; + onLanguageSelect(value: string) { this.languageChange.emit(value); } }