Files
marketplaces/src/app/components/header/header.component.ts

101 lines
3.4 KiB
TypeScript
Raw Normal View History

2026-02-26 21:54:21 +04:00
import { Component, ChangeDetectionStrategy, Renderer2, inject, DOCUMENT } from '@angular/core';
2026-02-14 00:45:17 +04:00
import { Router, RouterLink, RouterLinkActive } from '@angular/router';
2026-02-26 22:23:08 +04:00
import { CartService, LanguageService } from '../../services';
2026-01-18 18:57:06 +04:00
import { environment } from '../../../environments/environment';
import { LogoComponent } from '../logo/logo.component';
import { LanguageSelectorComponent } from '../language-selector/language-selector.component';
2026-02-28 17:18:24 +04:00
import { RegionSelectorComponent } from '../region-selector/region-selector.component';
2026-02-26 22:23:08 +04:00
import { LangRoutePipe } from '../../pipes/lang-route.pipe';
2026-02-26 23:09:20 +04:00
import { TranslatePipe } from '../../i18n/translate.pipe';
2026-01-18 18:57:06 +04:00
@Component({
selector: 'app-header',
2026-02-28 17:18:24 +04:00
imports: [RouterLink, RouterLinkActive, LogoComponent, LanguageSelectorComponent, RegionSelectorComponent, LangRoutePipe, TranslatePipe],
2026-01-18 18:57:06 +04:00
templateUrl: './header.component.html',
2026-02-19 01:23:25 +04:00
styleUrls: ['./header.component.scss'],
changeDetection: ChangeDetectionStrategy.OnPush
2026-01-18 18:57:06 +04:00
})
export class HeaderComponent {
cartItemCount;
2026-06-20 14:00:28 +04:00
cartTotal;
2026-01-18 18:57:06 +04:00
menuOpen = false;
brandName = environment.brandFullName;
logo = environment.logo;
isnovo = environment.theme === 'novo';
2026-02-26 21:54:21 +04:00
private renderer = inject(Renderer2);
private document = inject(DOCUMENT);
2026-02-26 22:23:08 +04:00
private langService = inject(LanguageService);
2026-02-26 21:54:21 +04:00
2026-02-14 00:45:17 +04:00
constructor(private cartService: CartService, private router: Router) {
2026-01-18 18:57:06 +04:00
this.cartItemCount = this.cartService.itemCount;
2026-06-20 14:00:28 +04:00
this.cartTotal = this.cartService.totalPrice;
2026-01-18 18:57:06 +04:00
}
2026-06-20 13:33:52 +04:00
get homeUrl(): string {
return `/${this.langService.currentLanguage()}`;
}
2026-01-18 18:57:06 +04:00
toggleMenu(): void {
this.menuOpen = !this.menuOpen;
2026-02-26 21:54:21 +04:00
if (this.menuOpen) {
this.renderer.addClass(this.document.body, 'dexar-menu-open');
} else {
this.renderer.removeClass(this.document.body, 'dexar-menu-open');
}
2026-01-18 18:57:06 +04:00
}
closeMenu(): void {
this.menuOpen = false;
2026-02-26 21:54:21 +04:00
this.renderer.removeClass(this.document.body, 'dexar-menu-open');
2026-01-18 18:57:06 +04:00
}
2026-02-14 00:45:17 +04:00
2026-06-20 13:33:52 +04:00
navigateHome(event?: Event): void {
event?.preventDefault();
this.closeMenu();
const homeUrl = this.homeUrl;
const currentUrl = this.router.url.split('?')[0].split('#')[0];
if (currentUrl === homeUrl || currentUrl === `${homeUrl}/`) {
this.document.defaultView?.scrollTo({ top: 0, behavior: 'smooth' });
return;
}
this.router.navigateByUrl(homeUrl).then(() => {
this.document.defaultView?.scrollTo({ top: 0, behavior: 'auto' });
});
}
2026-02-14 00:45:17 +04:00
navigateToSearch(): void {
2026-02-26 22:23:08 +04:00
const lang = this.langService.currentLanguage();
this.router.navigate([`/${lang}/search`]);
2026-02-14 00:45:17 +04:00
}
2026-02-14 18:38:25 +04:00
navigateToCatalog(): void {
this.closeMenu();
2026-02-26 22:23:08 +04:00
const lang = this.langService.currentLanguage();
this.router.navigate([`/${lang}`]).then(() => {
2026-02-14 18:38:25 +04:00
setTimeout(() => {
2026-02-26 21:54:21 +04:00
this.document.getElementById('catalog')?.scrollIntoView({ behavior: 'smooth' });
2026-02-14 18:38:25 +04:00
}, 100);
});
}
2026-06-20 14:00:28 +04:00
formatCartTotal(total: number): string {
const locale = this.langService.currentLanguage() === 'en'
? 'en-US'
: this.langService.currentLanguage() === 'hy'
? 'hy-AM'
: 'ru-RU';
const fractionDigits = Number.isInteger(total) ? 0 : 2;
const amount = new Intl.NumberFormat(locale, {
minimumFractionDigits: fractionDigits,
maximumFractionDigits: 2,
}).format(total);
const currencySymbol = this.langService.getCurrentCurrency()?.symbol ?? this.langService.currentCurrency();
return `${amount} ${currencySymbol}`;
}
2026-01-18 18:57:06 +04:00
}