mirror of
https://github.com/akveo/ngx-admin.git
synced 2025-12-16 23:40:14 +01:00
110 lines
3 KiB
TypeScript
110 lines
3 KiB
TypeScript
import { Component, OnDestroy, OnInit } from '@angular/core';
|
|
import { NbMediaBreakpointsService, NbMenuService, NbSidebarService, NbThemeService, NbMenuItem } from '@nebular/theme';
|
|
|
|
import { UserData } from '../../../@core/data/users';
|
|
import { LayoutService } from '../../../@core/utils';
|
|
import { map, takeUntil } from 'rxjs/operators';
|
|
import { Subject } from 'rxjs';
|
|
import { AuthService } from '../../../service/auth.service';
|
|
import { Router } from '@angular/router';
|
|
|
|
@Component({
|
|
selector: 'ngx-header',
|
|
styleUrls: ['./header.component.scss'],
|
|
templateUrl: './header.component.html',
|
|
})
|
|
export class HeaderComponent implements OnInit, OnDestroy {
|
|
|
|
private destroy$: Subject<void> = new Subject<void>();
|
|
userPictureOnly: boolean = false;
|
|
user: any;
|
|
|
|
themes = [
|
|
{
|
|
value: 'default',
|
|
name: 'Light',
|
|
},
|
|
{
|
|
value: 'dark',
|
|
name: 'Dark',
|
|
},
|
|
// {
|
|
// value: 'cosmic',
|
|
// name: 'Cosmic',
|
|
// },
|
|
// {
|
|
// value: 'corporate',
|
|
// name: 'Corporate',
|
|
// },
|
|
];
|
|
|
|
currentTheme = 'default';
|
|
|
|
userMenu = [ { title: 'Profile' }, { title: 'Log out' } ];
|
|
|
|
constructor(private sidebarService: NbSidebarService,
|
|
private menuService: NbMenuService,
|
|
private themeService: NbThemeService,
|
|
private userService: UserData,
|
|
private layoutService: LayoutService,
|
|
private breakpointService: NbMediaBreakpointsService,
|
|
private authService: AuthService,
|
|
private router: Router) {
|
|
}
|
|
|
|
ngOnInit() {
|
|
this.currentTheme = this.themeService.currentTheme;
|
|
|
|
this.userService.getUsers()
|
|
.pipe(takeUntil(this.destroy$))
|
|
.subscribe((users: any) => this.user = users.nick);
|
|
|
|
const { xl } = this.breakpointService.getBreakpointsMap();
|
|
this.themeService.onMediaQueryChange()
|
|
.pipe(
|
|
map(([, currentBreakpoint]) => currentBreakpoint.width < xl),
|
|
takeUntil(this.destroy$),
|
|
)
|
|
.subscribe((isLessThanXl: boolean) => this.userPictureOnly = isLessThanXl);
|
|
|
|
this.themeService.onThemeChange()
|
|
.pipe(
|
|
map(({ name }) => name),
|
|
takeUntil(this.destroy$),
|
|
)
|
|
.subscribe(themeName => this.currentTheme = themeName);
|
|
|
|
this.menuService.onItemClick().subscribe((event: { item: NbMenuItem }) => {
|
|
if (event.item.title === 'Log out') {
|
|
this.logout();
|
|
} else if (event.item.title === 'Profile') {
|
|
this.router.navigate(['/pages/layout/stepper/profile']); // Redirect to profile page
|
|
}
|
|
});
|
|
}
|
|
|
|
ngOnDestroy() {
|
|
this.destroy$.next();
|
|
this.destroy$.complete();
|
|
}
|
|
|
|
changeTheme(themeName: string) {
|
|
this.themeService.changeTheme(themeName);
|
|
}
|
|
|
|
toggleSidebar(): boolean {
|
|
this.sidebarService.toggle(true, 'menu-sidebar');
|
|
this.layoutService.changeLayoutSize();
|
|
|
|
return false;
|
|
}
|
|
|
|
navigateHome() {
|
|
this.menuService.navigateHome();
|
|
return false;
|
|
}
|
|
|
|
logout(): void {
|
|
this.authService.logout();
|
|
}
|
|
}
|