All files / navbar/si-navbar-item si-navbar-item.component.ts

88% Statements 22/25
87.5% Branches 7/8
80% Functions 8/10
90% Lines 18/20

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 91 92 93 94                                                                                  1x       1x             1x   1x   1x 1x   1x     1x 1x       3x 3x 3x 2x 2x 1x   1x           1x                   3x      
/**
 * Copyright (c) Siemens 2016 - 2025
 * SPDX-License-Identifier: MIT
 */
import { NgClass, NgTemplateOutlet } from '@angular/common';
import {
  booleanAttribute,
  Component,
  DoCheck,
  inject,
  input,
  OnDestroy,
  OnInit,
  viewChild
} from '@angular/core';
import { MenuItem } from '@siemens/element-ng/common';
import {
  SiHeaderDropdownComponent,
  SiHeaderDropdownItemsFactoryComponent,
  SiHeaderDropdownTriggerDirective
} from '@siemens/element-ng/header-dropdown';
import { SiLinkDirective } from '@siemens/element-ng/link';
import { SiTranslatePipe } from '@siemens/element-translate-ng/translate';
 
import { SiNavbarPrimaryComponent } from '../si-navbar-primary/si-navbar-primary.component';
 
/** @deprecated Use the new `si-application-header` instead. */
@Component({
  selector: 'si-navbar-item',
  imports: [
    SiLinkDirective,
    SiTranslatePipe,
    NgClass,
    NgTemplateOutlet,
    SiHeaderDropdownComponent,
    SiHeaderDropdownItemsFactoryComponent,
    SiHeaderDropdownTriggerDirective
  ],
  templateUrl: './si-navbar-item.component.html',
  host: { class: 'd-contents' }
})
export class SiNavbarItemComponent implements OnInit, DoCheck, OnDestroy {
  /**
   * MenuItem to display in the navbar.
   */
  readonly item = input.required<MenuItem>();
 
  /**
   * Is the item a quick action displayed on the end (right in LTR) side
   *
   * @defaultValue false
   */
  readonly quickAction = input(false, { transform: booleanAttribute });
 
  readonly dropdownTrigger = viewChild(SiHeaderDropdownTriggerDirective);
 
  protected active = false;
  protected navbar = inject(SiNavbarPrimaryComponent);
 
  private hasBadge = false;
 
  ngOnInit(): void {
    this.navbar.header().closeMobileMenus.subscribe(() => this.dropdownTrigger()?.close());
    this.navbar.navItemCount.update(value => value + 1);
  }
 
  ngDoCheck(): void {
    const item = this.item();
    const newHasBadge = !!(item.badge ?? item.badgeDot);
    if (this.quickAction() && this.hasBadge !== newHasBadge) {
      this.hasBadge = newHasBadge;
      if (this.hasBadge) {
        this.navbar.collapsibleActions()?.badgeCount.update(value => value + 1);
      } else {
        this.navbar.collapsibleActions()?.badgeCount.update(value => value - 1);
      }
    }
  }
 
  ngOnDestroy(): void {
    this.navbar.navItemCount.update(value => value - 1);
  }
 
  protected click(): void {
    Iif (!this.dropdownTrigger()) {
      this.navbar.header().closeMobileMenus.next();
    }
  }
 
  protected get visuallyHideTitle(): boolean {
    return !this.navbar.collapsibleActions()?.mobileExpanded();
  }
}