All files / lib/text-range-input-field text-range-input-field.component.ts

99.09% Statements 110/111
85% Branches 17/20
100% Functions 4/4
99.09% Lines 110/111

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 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 1121x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 37x 34x   34x 3x 3x 37x 22x 22x 22x 22x 22x 22x 22x 22x 22x 1x 1x 1x 1804x 1804x 1804x 1804x 1804x 1804x 1804x 1804x 1804x 1x  
/*******************************************************************************
 * Copyright bei
 * Entwicklungs- und Pflegeverbund für das gemeinsame Fachverfahren gefa
 *
 *******************************************************************************/
import { Component, Input, ViewChild } from '@angular/core';
 
import { InvalidControlValue, WidgetKeySet } from '../utils/util.types';
import { createWidgetKeySet } from '../utils/utilities';
 
import { BaseRangeInputFieldComponent } from '../base-range-input-field/base-range-input-field.component';
import { TextInputComponent } from '../text-input-field/text-input-field.component';
import { TextInputFormatter } from '../text-input-field/text-input-field.formatters';
 
/**
 * `gc-text-range-input-field` can be used to enter a range between two text values.
 */
@Component({
  selector: 'gc-text-range-input-field',
  templateUrl: './text-range-input-field.component.html',
  styleUrls: ['./text-range-input-field.component.css'],
  standalone: false,
})
export class TextRangeInputFieldComponent extends BaseRangeInputFieldComponent<
  string | InvalidControlValue
> {
  /**
   * Start slot value
   */
  @Input()
  public startSlotValue: string | InvalidControlValue = '';
 
  /**
   * End slot value
   */
  @Input()
  public endSlotValue: string | InvalidControlValue = '';
 
  /**
   * Formatter to display the value in a custom format and convert user input to the internal representation (used for both fields)
   */
  @Input()
  public formatter?: TextInputFormatter;
 
  /**
   * Enables setting of the value on the start slot only when the Promise resolves with value "true".
   */
  @Input()
  public permitValueChangeStart?: (
    v: string | InvalidControlValue,
  ) => Promise<boolean> | boolean;
 
  /**
   * Enables setting of the value on the end slot only when the Promise resolves with value "true".
   */
  @Input()
  public permitValueChangeEnd?: (
    v: string | InvalidControlValue,
  ) => Promise<boolean> | boolean;
 
  /**
   * Sets the maximum number of characters permitted for both input fields
   */
  @Input()
  public maxLength?: number;
 
  /**
   * Hint text for maximum characters allowed, shows only if `maxLength` is applied
   */
  @Input()
  public maxLengthHint?: string;
 
  /** @ignore */
  @ViewChild('startSlotEl')
  protected startSlotElement!: TextInputComponent;
 
  /** @ignore */
  @ViewChild('endSlotEl')
  protected endSlotElement!: TextInputComponent;
 
  /** @ignore */
  protected get maxLengthText(): string {
    if (this.maxLength && this.maxLengthHint) {
      return this.hint.length > 0
        ? ` \u2013 ${this.maxLengthHint}`
        : this.maxLengthHint;
    }
    return '';
  }
 
  /** @ignore */
  protected readonly _widgetKeys: WidgetKeySet = createWidgetKeySet(
    'gc-text-range-input',
  );
 
  /** @ignore */
  protected readonly maxLengthId =
    this._widgetKeys.widgetKey + '-max-length-message';
 
  /** @ignore */
  protected infoMessageId(): string | undefined {
    if (this.hint && this.maxLength && this.maxLengthHint) {
      return `${this.hintId} ${this.maxLengthId}`;
    } else if (this.hint) {
      return this.hintId;
    } else if (this.maxLength && this.maxLengthHint) {
      return this.maxLengthId;
    }
    return undefined;
  }
}