mseemann/angular2-mdl

View on GitHub
projects/core/src/lib/layout/mdl-layout-header.component.ts

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
import {
  Component,
  ElementRef,
  HostBinding,
  HostListener,
  QueryList,
  ViewEncapsulation,
} from "@angular/core";
import { MdlLayoutTabPanelComponent } from "./mdl-layout-tab-panel.component";
import { MdlLayoutMediatorService } from "./mdl-layout-mediator.service";

@Component({
  selector: "mdl-layout-header",
  template: `
    <ng-content></ng-content>
    <div
      *ngIf="tabs?.toArray() && tabs.toArray().length > 0"
      class="mdl-layout__tab-bar-container"
    >
      <div class="mdl-layout__tab-bar is-casting-shadow">
        <div
          *ngFor="let tab of tabs.toArray()"
          class="mdl-layout__tab"
          [ngClass]="{ 'is-active': tab.isActive }"
          (mouseover)="onTabMouseover(tab)"
          (mouseout)="onTabMouseout(tab)"
        >
          <div
            *ngIf="tab.titleComponent"
            (click)="tabSelected(tab)"
            [mdl-ripple]="isRipple"
            [append-view-container-ref]="tab.titleComponent.vcRef"
          ></div>
          <a
            *ngIf="!tab.titleComponent"
            href="javascript:void(0)"
            (click)="tabSelected(tab)"
            class="mdl-layout__tab"
            [ngClass]="{ 'is-active': tab.isActive }"
            [mdl-ripple]="isRipple"
            >{{ tab.title }}</a
          >
        </div>
      </div>
    </div>
  `,
  encapsulation: ViewEncapsulation.None,
})
export class MdlLayoutHeaderComponent {
  @HostBinding("class.mdl-layout__header--seamed")
  isSeamed = false;
  @HostBinding("class.mdl-layout__header")
  isLayoutHeader = true;
  @HostBinding("class.is-compact")
  isCompact = false;

  isAnimating = false;

  isRipple = true;
  // set from MdlLayoutComponent
  mode: string | undefined;
  el: HTMLElement;

  // will be set from mdllayoutcomponent
  tabs: QueryList<MdlLayoutTabPanelComponent> =
    new QueryList<MdlLayoutTabPanelComponent>();

  constructor(
    private elementRef: ElementRef,
    private layoutMediatorService: MdlLayoutMediatorService
  ) {
    this.el = elementRef.nativeElement;
  }

  @HostBinding("class.mdl-layout__header--waterfall")
  get isWaterfall(): boolean {
    return this.mode === "waterfall";
  }

  @HostBinding("class.is-casting-shadow") get isCastingShadow(): boolean {
    return this.mode === "standard" || this.isCompact;
  }

  @HostBinding("class.mdl-layout__header--scroll")
  get isHeaderScroll(): boolean {
    return this.mode === "scroll";
  }

  @HostListener("transitionend")
  onTransitionEnd(): void {
    this.isAnimating = false;
  }

  @HostListener("click")
  onClick(): void {
    if (this.isCompact) {
      this.isCompact = false;
      this.isAnimating = true;
    }
  }

  onTabMouseover(tab: MdlLayoutTabPanelComponent): void {
    this.layoutMediatorService.tabMouseover(tab);
  }

  onTabMouseout(tab: MdlLayoutTabPanelComponent): void {
    this.layoutMediatorService.tabMouseout(tab);
  }

  tabSelected(tab: MdlLayoutTabPanelComponent): void {
    this.layoutMediatorService.tabSelected(tab);
  }
}