All files / src/lib/tl-mega-menu/tl-mega-menu-section tl-mega-menu-section.component.ts

90.63% Statements 29/32
66.67% Branches 4/6
77.78% Functions 7/9
90.32% Lines 28/31

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90                    1x         4x           4x         4x       4x       4x 4x 4x 4x     4x         4x 4x             1x 1x 1x 1x 1x         1x 1x 1x 1x       2x 1x   1x                 3x 3x 3x   3x        
import { AfterContentInit, ChangeDetectionStrategy, Component, HostBinding, Injector, Input, OnInit } from '@angular/core';
import { TamuAbstractBaseComponent } from '../../shared/tl-abstract-base.component';
import { TlMegaMenuComponent } from '../tl-mega-menu.component';
 
@Component({
  selector: 'tl-mega-menu-section-component',
  templateUrl: './tl-mega-menu-section.component.html',
  styleUrls: ['./tl-mega-menu-section.component.scss'],
  changeDetection: ChangeDetectionStrategy.Default
})
export class TlMegaMenuSectionComponent extends TamuAbstractBaseComponent implements AfterContentInit, OnInit  {
 
  private parent: TlMegaMenuComponent;
 
  /** Toggles the mobile-layout class on the root element. */
  @HostBinding('class.mobile-layout') mobileLayout = this.isMobileLayout;
 
  /** Allows for the override of the --tl-mobile-display-wvr-nav-list-component-max-height variable. */
  @HostBinding('style.--wvr-nav-list-component-max-height') wvrNavListComponentMaxHeight: string;
 
  /** The text value to be displayed as section title in the tl-mega-menu dropdown menu. */
  @Input() sectionTitle = 'Section Title';
 
  /** The href value for the view all button. */
  @Input() viewAllHref: string;
 
  active = false;
 
  // tslint:disable-next-line:unnecessary-constructor
  constructor(injector: Injector) {
    super(injector);
  }
 
  ngOnInit(): void {
    super.ngOnInit();
    const elem = this.eRef.nativeElement as HTMLElement;
    const parentElem = elem.closest('tl-mega-menu');
    Iif (parentElem) {
      this.parent = this.componentRegistry.getComponentByElement(parentElem as HTMLElement) as TlMegaMenuComponent;
    } else {
      console.warn(`TlMegaMenuSectionComponent (${this.id}) is not within a TlMegaMenuComponent`);
    }
  }
 
  ngAfterContentInit(): void {
    super.ngAfterContentInit();
    setTimeout(() => {
      this.parent.addSection(this);
    }, 1500);
  }
 
  open(): void {
    // tslint:disable-next-line: radix
    let mobileDisplayMaxHeight = parseInt(this.parent.mobileDisplayMaxHeight.replace('px', ''));
    mobileDisplayMaxHeight += this.getExpandedHeight();
    this.active = true;
    this.parent.mobileDisplayMaxHeight = `${mobileDisplayMaxHeight}px`;
    this.wvrNavListComponentMaxHeight = `${this.getExpandedHeight()}px`;
  }
 
  close(): void {
    // tslint:disable-next-line: radix
    let mobileDisplayMaxHeight = parseInt(this.parent.mobileDisplayMaxHeight.replace('px', ''));
    this.active = false;
    mobileDisplayMaxHeight -= this.getExpandedHeight();
    this.parent.mobileDisplayMaxHeight = `${mobileDisplayMaxHeight}px`;
  }
 
  toggleOpenClose(): void {
    if (this.active) {
      this.close();
    } else {
      this.open();
    }
  }
 
  getElementHeight(): number {
    return (this.eRef.nativeElement as HTMLElement).clientHeight;
  }
 
  getExpandedHeight(): number {
    const elem = (this.eRef.nativeElement as HTMLElement);
    const lis = elem.querySelectorAll('tl-nav-li');
    const liHeight = lis.length ? lis[0].clientHeight : 0;
 
    return lis.length * liHeight;
  }
 
}