File

components/event-parameters/event-parameters.component.ts

Description

Control panel form fields for GMM event parameters.

Implements

OnInit

Metadata

Index

Properties
Methods

Constructor

constructor(service: AppService, destroyRef: DestroyRef)
Parameters :
Name Type Optional
service AppService No
destroyRef DestroyRef No

Methods

ngOnInit
ngOnInit()
Returns : void
Private onZHypCentered
onZHypCentered()
Returns : void

Properties

Private controls
Default value : this.form.controls
form
Default value : this.service.formGroup

Control panel form field state

MwCommonValues
Default value : MW_COMMON_VALUES

Common Vs30 values

MwMultiple$
Default value : this.service.formGroup.controls.multiSelectableParam.valueChanges.pipe( map( multiSelectableParam => multiSelectableParam.toString() === GmmFormControlIds.MW.toString(), ), )

Whether magnitudes are multi-selectable

parameters
Default value : computed(() => this.service.usage()?.response.parameters)

Usage parameters

import {AsyncPipe} from '@angular/common';
import {Component, computed, DestroyRef, OnInit, ViewEncapsulation} from '@angular/core';
import {takeUntilDestroyed} from '@angular/core/rxjs-interop';
import {ReactiveFormsModule} from '@angular/forms';
import {MatButtonToggle, MatButtonToggleGroup} from '@angular/material/button-toggle';
import {MatCheckbox} from '@angular/material/checkbox';
import {MatError, MatFormField, MatLabel} from '@angular/material/form-field';
import {MatInput} from '@angular/material/input';
import {
  GmmFormControlIds,
  MW_COMMON_VALUES,
  NshmpGmmMultiSelectComponent,
} from '@ghsc/nshmp-lib-ng/gmm';
import {NshmpSectionComponent} from '@ghsc/nshmp-lib-ng/nshmp';
import {combineLatest} from 'rxjs';
import {map} from 'rxjs/operators';

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

/**
 * Control panel form fields for GMM event parameters.
 */
@Component({
  encapsulation: ViewEncapsulation.None,
  imports: [
    NshmpGmmMultiSelectComponent,
    NshmpSectionComponent,
    MatLabel,
    MatFormField,
    MatInput,
    MatError,
    MatButtonToggleGroup,
    MatButtonToggle,
    MatCheckbox,
    AsyncPipe,
    ReactiveFormsModule,
  ],
  selector: 'app-event-parameters',
  styleUrl: './event-parameters.component.scss',
  templateUrl: './event-parameters.component.html',
})
export class EventParametersComponent implements OnInit {
  /** Common Vs30 values */
  MwCommonValues = MW_COMMON_VALUES;

  /** Control panel form field state */
  form = this.service.formGroup;

  /** Whether magnitudes are multi-selectable */
  MwMultiple$ = this.service.formGroup.controls.multiSelectableParam.valueChanges.pipe(
    map(
      multiSelectableParam => multiSelectableParam.toString() === GmmFormControlIds.MW.toString(),
    ),
  );

  /** Usage parameters */
  parameters = computed(() => this.service.usage()?.response.parameters);

  private controls = this.form.controls;

  constructor(
    private service: AppService,
    private destroyRef: DestroyRef,
  ) {}

  ngOnInit(): void {
    combineLatest([
      this.controls.Mw.valueChanges,
      this.controls.rake.valueChanges,
      this.controls.rakeButton.valueChanges,
      this.controls.zHyp.valueChanges,
    ])
      .pipe(takeUntilDestroyed(this.destroyRef))
      .subscribe(() => this.service.resetState());

    this.controls.zHypCentered.valueChanges
      .pipe(takeUntilDestroyed(this.destroyRef))
      .subscribe(() => this.onZHypCentered());
  }

  private onZHypCentered(): void {
    if (this.form.getRawValue().zHypCentered) {
      this.controls.zHyp.disable();
    } else {
      this.controls.zHyp.enable();
    }

    this.service.calcHypocenterDepth(this.form);
  }
}
<!-- Event parameters -->
<nshmp-section label="Event Parameters">
  <div class="grid-row grid-gap-1">
    <!-- Event parameters: Mw input -->
    <nshmp-gmm-multi-select
      class="grid-col-6 mw-input"
      label="M<sub>W</sub>"
      [multiple]="MwMultiple$ | async"
      [numberControl]="form.controls.Mw"
      [parameter]="parameters()?.Mw"
      placeholder="Select values..."
      [selectControl]="form.controls.MwMulti"
      [selectOptions]="MwCommonValues"
    />

    <!-- Event Parameters: Rake -->
    <mat-form-field class="grid-col-6 rake-input">
      <mat-label>
        Rake (°)
        <span class="form-required">*</span>
      </mat-label>
      <input
        matInput
        [max]="parameters()?.rake?.max"
        [min]="parameters()?.rake?.min"
        [formControl]="form.controls.rake"
        step="5"
        type="number"
        [value]="form?.controls?.rakeButton?.value"
      />
      <mat-error>
        [
        {{ parameters()?.rake?.min }},
        {{ parameters()?.rake?.max }}
        ]
      </mat-error>
    </mat-form-field>
  </div>

  <!-- Event Parameters: Rake Buttons -->
  <mat-button-toggle-group
    class="grid-col-12 rake-buttons"
    [formControl]="form.controls.rakeButton"
    [value]="form.controls.rake.value"
  >
    <mat-button-toggle class="grid-col-4" [value]="0"> Strike-Slip </mat-button-toggle>
    <mat-button-toggle class="grid-col-4" [value]="-90"> Normal </mat-button-toggle>
    <mat-button-toggle class="grid-col-4" [value]="90"> Reverse </mat-button-toggle>
  </mat-button-toggle-group>

  <!-- Event Parameters: zHyp -->
  <div class="grid-row grid-gap-lg zhyp-input">
    <mat-form-field class="grid-col-5">
      <mat-label>
        Z<sub>HYP</sub> (km)
        <span class="form-required">*</span>
      </mat-label>
      <input
        matInput
        [max]="parameters()?.zHyp?.max"
        [min]="parameters()?.zHyp?.min"
        [formControl]="form.controls.zHyp"
        step="0.5"
        type="number"
      />
      <mat-error>
        [
        {{ parameters()?.zHyp?.min }},
        {{ parameters()?.zHyp?.max }}
        ]
      </mat-error>
    </mat-form-field>

    <!-- Event Parameters: centered down dip -->
    <div class="grid-col-7">
      <mat-checkbox class="primary down-dip-checkbox" [formControl]="form.controls.zHypCentered">
        Centered down-dip
      </mat-checkbox>
    </div>
  </div>
</nshmp-section>
Legend
Html element
Component
Html element with directive

results matching ""

    No results matching ""