2026-05-05 00:52:03 +04:00
|
|
|
import { UpperCasePipe } from '@angular/common';
|
|
|
|
|
import { Component, HostListener, inject, signal } from '@angular/core';
|
2026-05-04 23:49:27 +04:00
|
|
|
import { RouterLink } from '@angular/router';
|
2026-05-04 23:56:38 +04:00
|
|
|
import { TranslatePipe } from '../translate/translate.pipe';
|
|
|
|
|
import { TranslationService, Lang } from '../translate/translation.service';
|
2026-05-04 23:49:27 +04:00
|
|
|
|
2026-05-05 00:52:03 +04:00
|
|
|
interface LangOption { code: Lang; label: string; flag: string; }
|
|
|
|
|
|
2026-05-04 23:49:27 +04:00
|
|
|
@Component({
|
|
|
|
|
selector: 'app-site-header',
|
2026-05-05 00:52:03 +04:00
|
|
|
imports: [RouterLink, TranslatePipe, UpperCasePipe],
|
2026-05-04 23:49:27 +04:00
|
|
|
templateUrl: './site-header.html',
|
|
|
|
|
styleUrl: './site-header.scss'
|
|
|
|
|
})
|
|
|
|
|
export class SiteHeader {
|
2026-05-04 23:56:38 +04:00
|
|
|
private i18n = inject(TranslationService);
|
|
|
|
|
|
2026-05-04 23:49:27 +04:00
|
|
|
menuOpen = signal(false);
|
2026-05-05 00:52:03 +04:00
|
|
|
langOpen = signal(false);
|
2026-05-04 23:56:38 +04:00
|
|
|
currentLang = this.i18n.currentLang;
|
|
|
|
|
|
2026-05-05 00:52:03 +04:00
|
|
|
langs: LangOption[] = [
|
|
|
|
|
{ code: 'ru', label: 'Русский', flag: '/flags/ru.svg' },
|
|
|
|
|
{ code: 'en', label: 'English', flag: '/flags/en.svg' },
|
|
|
|
|
{ code: 'hy', label: 'Հայերեն', flag: '/flags/arm.svg' },
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
get activeLang(): LangOption {
|
|
|
|
|
return this.langs.find(l => l.code === this.currentLang()) ?? this.langs[0];
|
|
|
|
|
}
|
|
|
|
|
|
2026-05-04 23:49:27 +04:00
|
|
|
toggleMenu(): void { this.menuOpen.update(v => !v); }
|
|
|
|
|
closeMenu(): void { this.menuOpen.set(false); }
|
2026-05-05 00:52:03 +04:00
|
|
|
toggleLang(): void { this.langOpen.update(v => !v); }
|
|
|
|
|
closeLang(): void { this.langOpen.set(false); }
|
|
|
|
|
|
|
|
|
|
setLang(lang: Lang): void {
|
|
|
|
|
this.i18n.setLanguage(lang);
|
|
|
|
|
this.langOpen.set(false);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@HostListener('document:click', ['$event.target'])
|
|
|
|
|
onDocClick(target: EventTarget | null): void {
|
|
|
|
|
if (!(target instanceof HTMLElement) || !target.closest('.lang-select')) {
|
|
|
|
|
this.langOpen.set(false);
|
|
|
|
|
}
|
|
|
|
|
}
|
2026-05-04 23:49:27 +04:00
|
|
|
}
|