File

components/spectrum-data/spectrum-data.component.ts

Description

Tables spectra data.

Metadata

Index

Properties
Methods

Methods

Private spectraToTableData
spectraToTableData(spectra: ResponseSpectra[])

Convert response spectra data to table data.

Parameters :
Name Type Optional Description
spectra ResponseSpectra[] No

Response spectra data

Private tablesToTableData
tablesToTableData(tables: StaticHazardCurveTable[])

Convert static hazard curve tables to table data.

Parameters :
Name Type Optional Description
tables StaticHazardCurveTable[] No

Curve tables

Returns : TableData[]

Properties

formGroup
Default value : this.service.formGroup
responseSpectra
Default value : this.service.responseSpectra

The response spectra data

Private service
Default value : inject(AppService)
spectraFilename$
Default value : this.formGroup.valueChanges.pipe( map( values => `static-hazard-spectra-${values.model}-(${values.longitude},${values.latitude}).csv`, ), )

Spectra export filename

tableData
Default value : computed(() => this.tablesToTableData(this.tables()))

Static hazard table data

tables
Default value : computed(() => { if (this.responseSpectra()) { return this.spectraToTableData(this.responseSpectra()); } else { return []; } })

Static hazard curve table

import {AsyncPipe} from '@angular/common';
import {ChangeDetectionStrategy, Component, computed, inject} from '@angular/core';
import {
  MatAccordion,
  MatExpansionPanel,
  MatExpansionPanelHeader,
} from '@angular/material/expansion';
import {hazardUtils, ResponseSpectra} from '@ghsc/nshmp-lib-ng/hazard';
import {
  NshmpDataTableComponent,
  NshmpExportDataTableComponent,
  TableData,
} from '@ghsc/nshmp-lib-ng/nshmp';
import {map} from 'rxjs';

import {StaticHazardCurveTable} from '../../models/curve-table.model';
import {AppService} from '../../services/app.service';

/**
 * Tables spectra data.
 */
@Component({
  changeDetection: ChangeDetectionStrategy.OnPush,
  host: {id: 'hazard-static-spectrum-data'},
  imports: [
    NshmpExportDataTableComponent,
    NshmpDataTableComponent,
    MatAccordion,
    MatExpansionPanel,
    MatExpansionPanelHeader,
    AsyncPipe,
  ],
  selector: 'app-spectrum-data',
  styleUrl: './spectrum-data.component.scss',
  templateUrl: './spectrum-data.component.html',
})
export class SpectrumDataComponent {
  private service = inject(AppService);

  /** The response spectra data */
  responseSpectra = this.service.responseSpectra;

  formGroup = this.service.formGroup;

  /** Static hazard curve table */
  tables = computed(() => {
    if (this.responseSpectra()) {
      return this.spectraToTableData(this.responseSpectra());
    } else {
      return [];
    }
  });

  /** Static hazard table data */
  tableData = computed(() => this.tablesToTableData(this.tables()));

  /** Spectra export filename */
  spectraFilename$ = this.formGroup.valueChanges.pipe(
    map(
      values =>
        `static-hazard-spectra-${values.model}-(${values.longitude},${values.latitude}).csv`,
    ),
  );

  /**
   * Convert response spectra data to table data.
   *
   * @param spectra Response spectra data
   */
  private spectraToTableData(spectra: ResponseSpectra[]): StaticHazardCurveTable[] {
    return spectra.map(spectrum => {
      const tableData = hazardUtils.responseSpectraToTableData(spectrum).map((data, index) => {
        if (index === 0) {
          data.exportSectionBreakLabel = `Site Class - ${spectrum.siteClass}`;
        }
        return data;
      });

      return {
        siteClass: spectrum.siteClass,
        tableData,
      };
    });
  }

  /**
   * Convert static hazard curve tables to table data.
   *
   * @param tables Curve tables
   */
  private tablesToTableData(tables: StaticHazardCurveTable[]): TableData[] {
    if (tables === null || tables.length === 0) {
      return [];
    }
    return tables
      .map(table => table.tableData)
      .reduce((previouse, current) => [...previouse, ...current]);
  }
}
<!-- Static Hazard Response Spectrum Data -->
<nshmp-export-data-table
  [table]="tableData()"
  [filename]="spectraFilename$ | async"
  buttonText="Export Spectra as CSV"
/>

<div class="data-table-container">
  @if (responseSpectra()) {
    <mat-accordion>
      @for (table of tables(); track table) {
        <mat-expansion-panel [expanded]="formGroup.getRawValue().siteClass === table.siteClass">
          <mat-expansion-panel-header>
            {{ table.siteClass }}
          </mat-expansion-panel-header>
          <nshmp-data-table [table]="table.tableData" />
        </mat-expansion-panel>
      }
    </mat-accordion>
  }
</div>
Legend
Html element
Component
Html element with directive

results matching ""

    No results matching ""