Files
marketplaces/src/app/components/language-selector/language-selector.component.ts

64 lines
1.6 KiB
TypeScript
Raw Normal View History

2026-02-19 01:23:25 +04:00
import { Component, HostListener, ElementRef, ChangeDetectionStrategy } from '@angular/core';
2026-03-24 00:09:11 +04:00
import { LanguageService, Language, Currency } from '../../services/language.service';
2026-01-18 18:57:06 +04:00
@Component({
selector: 'app-language-selector',
2026-02-19 01:23:25 +04:00
imports: [],
2026-01-18 18:57:06 +04:00
templateUrl: './language-selector.component.html',
2026-02-19 01:23:25 +04:00
styleUrls: ['./language-selector.component.scss'],
changeDetection: ChangeDetectionStrategy.OnPush
2026-01-18 18:57:06 +04:00
})
export class LanguageSelectorComponent {
dropdownOpen = false;
2026-03-24 00:09:11 +04:00
currencyOpen = false;
2026-01-18 18:57:06 +04:00
constructor(
public languageService: LanguageService,
private elementRef: ElementRef
) {}
toggleDropdown(): void {
this.dropdownOpen = !this.dropdownOpen;
2026-03-24 00:09:11 +04:00
this.currencyOpen = false;
}
toggleCurrency(): void {
this.currencyOpen = !this.currencyOpen;
this.dropdownOpen = false;
2026-01-18 18:57:06 +04:00
}
selectLanguage(lang: Language): void {
if (lang.enabled) {
2026-02-26 22:23:08 +04:00
this.languageService.switchLanguage(lang.code);
2026-01-18 18:57:06 +04:00
this.dropdownOpen = false;
}
}
2026-03-24 00:09:11 +04:00
selectCurrency(currency: Currency): void {
this.languageService.setCurrency(currency.code);
this.currencyOpen = false;
}
2026-01-18 18:57:06 +04:00
closeDropdown(): void {
this.dropdownOpen = false;
2026-03-24 00:09:11 +04:00
this.currencyOpen = false;
2026-01-18 18:57:06 +04:00
}
2026-03-06 18:40:58 +04:00
onKeyDown(event: KeyboardEvent): void {
if (event.key === 'Escape') {
this.dropdownOpen = false;
} else if (event.key === 'Enter' || event.key === ' ') {
event.preventDefault();
this.toggleDropdown();
}
}
2026-01-18 18:57:06 +04:00
@HostListener('document:click', ['$event'])
onClickOutside(event: Event): void {
if (!this.elementRef.nativeElement.contains(event.target)) {
this.dropdownOpen = false;
2026-03-24 00:09:11 +04:00
this.currencyOpen = false;
2026-01-18 18:57:06 +04:00
}
}
}