import {
AfterViewInit,
Component,
ContentChild,
ElementRef,
Input,
NgZone,
OnDestroy,
Renderer2,
TemplateRef,
ViewChild
} from '@angular/core';
import {LayoutStore} from '../layout.store';
import {HeaderService} from './header.service';
import {removeListeners, removeSubscriptions} from '../../helpers';
/**
* Header Logo
*/
@Component({
selector: 'mk-layout-header-logo',
template: ''
})
export class HeaderLogoComponent {
@ViewChild('templateRef') public templateRef: TemplateRef;
}
/**
* Header Logo Mini
*/
@Component({
selector: 'mk-layout-header-logo-mini',
template: ''
})
export class HeaderLogoMiniComponent {
@ViewChild('templateRef') public templateRef: TemplateRef;
}
/**
* Header
*/
@Component({
selector: 'mk-layout-header',
templateUrl: './header.component.html',
styleUrls: ['./header.component.css']
})
export class HeaderComponent implements AfterViewInit, OnDestroy {
private isSidebarLeftCollapsed: boolean;
private isSidebarRightCollapsed: boolean;
private listeners = [];
private subscriptions = [];
@Input() isSidebarLeftToggle = true;
@Input() isSidebarRightToggle = true;
@ContentChild(HeaderLogoComponent) public headerLogoComponent: HeaderLogoComponent;
@ContentChild(HeaderLogoMiniComponent) public headerLogoMiniComponent: HeaderLogoMiniComponent;
@ViewChild('headerElement') private headerElement: ElementRef;
@ViewChild('sidebarLeftToggleElement') private sidebarLeftToggleElement: ElementRef;
@ViewChild('sidebarRightToggleElement') private sidebarRightToggleElement: ElementRef;
/**
* @method constructor
* @param layoutStore [description]
* @param ngZone [description]
* @param renderer2 [description]
* @param elementRef [description]
* @param headerService [description]
*/
constructor(
private layoutStore: LayoutStore,
private ngZone: NgZone,
private renderer2: Renderer2,
private elementRef: ElementRef,
private headerService: HeaderService
) {}
/**
* @method ngAfterViewInit
*/
ngAfterViewInit() {
this.headerService.elementRef = this.headerElement;
if (this.sidebarLeftToggleElement) {
this.subscriptions.push(this.layoutStore.isSidebarLeftCollapsed.subscribe((value: boolean) => {
this.isSidebarLeftCollapsed = value;
}));
this.ngZone.runOutsideAngular(() => {
this.listeners.push(this.renderer2.listen(this.sidebarLeftToggleElement.nativeElement, 'click', (event: Event) => {
event.preventDefault();
this.layoutStore.sidebarLeftCollapsed(!this.isSidebarLeftCollapsed);
}));
});
}
if (this.sidebarRightToggleElement) {
this.subscriptions.push(this.layoutStore.isSidebarRightCollapsed.subscribe((value: boolean) => {
this.isSidebarRightCollapsed = value;
}));
this.ngZone.runOutsideAngular(() => {
this.listeners.push(this.renderer2.listen(this.sidebarRightToggleElement.nativeElement, 'click', (event: Event) => {
event.preventDefault();
this.layoutStore.sidebarRightCollapsed(!this.isSidebarRightCollapsed);
}));
});
}
}
/**
* @method ngOnDestroy
*/
ngOnDestroy() {
this.listeners = removeListeners(this.listeners);
this.subscriptions = removeSubscriptions(this.subscriptions);
}
}