All files / threshold si-readonly-threshold-option.component.ts

93.75% Statements 15/16
84.61% Branches 11/13
100% Functions 4/4
93.33% Lines 14/15

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                                                            1x 10x 10x   10x 10x 10x 10x 22x         10x 5x 5x             10x 10x 10x      
/**
 * Copyright (c) Siemens 2016 - 2025
 * SPDX-License-Identifier: MIT
 */
import { NgClass } from '@angular/common';
import { Component, computed, input } from '@angular/core';
import { SiIconComponent } from '@siemens/element-ng/icon';
import { SelectOption, SelectOptionLegacy } from '@siemens/element-ng/select';
import { SiTranslatePipe } from '@siemens/element-translate-ng/translate';
 
@Component({
  selector: 'si-readonly-threshold-option',
  imports: [NgClass, SiTranslatePipe, SiIconComponent],
  template: `@let opt = option();
    @if (opt && opt.icon) {
      <i class="icon-stack">
        <si-icon
          class="icon me-2"
          [icon]="opt.icon"
          [ngClass]="[(!opt.disabled && color()) || '']"
        />
        @if (opt.type === 'option' && opt.stackedIcon) {
          <si-icon class="icon me-2" [icon]="opt.stackedIcon" [ngClass]="opt.stackedIconColor" />
        }
      </i>
    }
    <span class="text-truncate">{{ label() | translate }}</span>`,
  styleUrl: './si-readonly-threshold-option.component.scss',
  host: { class: 'd-flex align-items-center py-2 my-4 px-4 si-h5' }
})
export class SiReadonlyThresholdOptionComponent {
  readonly value = input.required<string>();
  readonly options = input.required<SelectOptionLegacy[] | SelectOption<unknown>[]>();
 
  protected readonly option = computed(() => {
    const options = this.options();
    const value = this.value();
    if (value && options) {
      return options.find(opt => (opt.type === 'option' ? opt.value === value : opt.id === value));
    }
    return undefined;
  });
 
  protected readonly color = computed(() => {
    const option = this.option();
    return !option || option.disabled
      ? undefined
      : option.type === 'option'
        ? option.iconColor
        : option.color;
  });
 
  protected readonly label = computed(() => {
    const option = this.option();
    return option?.type === 'option' ? option.label : option?.title;
  });
}