File

components/disagg-summary/disagg-summary.component.ts

Description

Lists of disaggregation summaries from service response.

Metadata

Index

Properties
Methods
Inputs

Inputs

showExportButton
Default value : true

Methods

Private dataValue
dataValue(data: number | string)

Format data.

Parameters :
Name Type Optional Description
data number | string No

The data

Returns : number | string

Properties

Readonly componentData
Default value : input.required<ComponentData, DisaggComponentData>({ transform: componentData => { return { data: componentData, summaries: componentData?.summary.map(summary => ({ data: summary.data.map(data => { data.value = this.dataValue(data.value); return data; }), summary, })), }; }, })

Disaggregation component data state

form
Default value : this.service.formGroup

Form field state

service
Default value : inject(AppService)
Readonly showExportButton
Default value : true
import {ChangeDetectionStrategy, Component, inject, input} from '@angular/core';
import {MatButton} from '@angular/material/button';
import {MatDivider} from '@angular/material/divider';
import {MatIcon} from '@angular/material/icon';
import {MatList, MatListItem} from '@angular/material/list';
import {
  DisaggComponentData,
  DisaggSummary,
  DisaggSummaryData,
} from '@ghsc/nshmp-utils-ts/libs/nshmp-haz/www/disagg-service';

import {AppService} from '../../services/app.service';

interface ComponentData {
  data: DisaggComponentData;
  summaries: Summary[];
}

interface Summary {
  data: DisaggSummaryData[];
  summary: DisaggSummary;
}

/**
 * Lists of disaggregation summaries from service response.
 */
@Component({
  changeDetection: ChangeDetectionStrategy.OnPush,
  host: {id: 'hazard-disagg-disagg-summary'},
  imports: [MatDivider, MatList, MatListItem, MatIcon, MatButton],
  selector: 'app-disagg-summary',
  styleUrl: './disagg-summary.component.scss',
  templateUrl: './disagg-summary.component.html',
})
export class DisaggSummaryComponent {
  service = inject(AppService);

  /** Disaggregation component data state */
  readonly componentData = input.required<ComponentData, DisaggComponentData>({
    transform: componentData => {
      return {
        data: componentData,
        summaries: componentData?.summary.map(summary => ({
          data: summary.data.map(data => {
            data.value = this.dataValue(data.value);
            return data;
          }),
          summary,
        })),
      };
    },
  });

  readonly showExportButton = input(true);

  /** Form field state */
  form = this.service.formGroup;

  /**
   * Format data.
   *
   * @param data The data
   */
  private dataValue(data: number | string): number | string {
    if (typeof data === 'number' && data.toString().includes('.')) {
      const split = data.toString().split('.');
      if (split[0].length === 1 && split[1].length > 4) {
        data = data.toExponential(3);
      }
    }
    return data;
  }
}
@if (componentData()) {
  <div class="disagg-summaries">
    <!-- Summaries -->
    <div class="summary-group">
      @if (showExportButton()) {
        <div class="print-display-none">
          <button
            matButton="elevated"
            class="primary"
            (click)="service.saveSummary(componentData().data, form.getRawValue())"
          >
            <mat-icon>file_save</mat-icon>
            Export as Text
          </button>
        </div>

        <mat-divider />
      }

      <div class="grid-row">
        @for (summaryData of componentData()?.summaries; track summaryData) {
          <div
            class="grid-col-12 mobile:grid-col-6 desktop-lg:grid-col-4 widescreen:grid-col-3 summary-values print-flex-basis-half"
          >
            <h4>{{ summaryData.summary.name }}</h4>

            <mat-divider />

            <mat-list>
              @for (data of summaryData.data; track data) {
                <mat-list-item>
                  <div class="list-item">
                    <span class="data-name">{{ data.name }}</span>
                    : {{ data.value }} {{ data.units }}
                  </div>
                </mat-list-item>
              }
            </mat-list>
          </div>
        }
      </div>
    </div>
  </div>
}
Legend
Html element
Component
Html element with directive

results matching ""

    No results matching ""