datasurvey/src/main/webapp/app/layouts/main/main.component.ts

68 lines
2.1 KiB
TypeScript

import { Component, OnInit, RendererFactory2, Renderer2 } from '@angular/core';
import { Title } from '@angular/platform-browser';
import { Router, ActivatedRouteSnapshot, NavigationEnd } from '@angular/router';
import { TranslateService, LangChangeEvent } from '@ngx-translate/core';
import * as dayjs from 'dayjs';
import { AccountService } from 'app/core/auth/account.service';
@Component({
selector: 'jhi-main',
templateUrl: './main.component.html',
styleUrls: ['./main.component.scss'],
})
export class MainComponent implements OnInit {
private renderer: Renderer2;
constructor(
private accountService: AccountService,
private titleService: Title,
private router: Router,
private translateService: TranslateService,
rootRenderer: RendererFactory2
) {
this.renderer = rootRenderer.createRenderer(document.querySelector('html'), null);
}
ngOnInit(): void {
// try to log in automatically
this.accountService.identity().subscribe();
this.router.events.subscribe(event => {
if (event instanceof NavigationEnd) {
this.updateTitle();
}
});
this.translateService.onLangChange.subscribe((langChangeEvent: LangChangeEvent) => {
this.updateTitle();
dayjs.locale(langChangeEvent.lang);
this.renderer.setAttribute(document.querySelector('html'), 'lang', langChangeEvent.lang);
});
}
private getPageTitle(routeSnapshot: ActivatedRouteSnapshot): string {
let title: string = routeSnapshot.data['pageTitle'] ?? '';
if (routeSnapshot.firstChild) {
title = this.getPageTitle(routeSnapshot.firstChild) || title;
}
return title;
}
private updateTitle(): void {
let pageTitle = this.getPageTitle(this.router.routerState.snapshot.root);
if (!pageTitle) {
pageTitle = 'global.title';
}
this.translateService.get(pageTitle).subscribe(title => this.titleService.setTitle(title));
}
isAdmin(): boolean {
return this.accountService.hasAnyAuthority('ROLE_ADMIN');
}
isAuthenticated(): boolean {
return this.accountService.isAuthenticated();
}
}