File

components/path-parameters/path-parameters.component.ts

Description

Control panel form fields for GMM path 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 onDerivePathParams
onDerivePathParams()
Returns : void
Private onHangingWall
onHangingWall()
Returns : void
Private onRx
onRx()
Returns : void

Properties

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

Control panel form field state

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

Usage parameters

import {Component, computed, DestroyRef, OnInit} 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 {NshmpSectionComponent} from '@ghsc/nshmp-lib-ng/nshmp';

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

/**
 * Control panel form fields for GMM path parameters.
 */
@Component({
  imports: [
    MatLabel,
    MatFormField,
    MatInput,
    MatError,
    MatCheckbox,
    MatButtonToggleGroup,
    MatButtonToggle,
    ReactiveFormsModule,
    NshmpSectionComponent,
  ],
  selector: 'app-path-parameters',
  styleUrl: './path-parameters.component.scss',
  templateUrl: './path-parameters.component.html',
})
export class PathParametersComponent implements OnInit {
  /** Control panel form field state */
  form = this.service.formGroup;

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

  private controls = this.form.controls;

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

  ngOnInit(): void {
    this.controls.rX.valueChanges
      .pipe(takeUntilDestroyed(this.destroyRef))
      .subscribe(() => this.onRx());

    this.controls.derivePathParams.valueChanges
      .pipe(takeUntilDestroyed(this.destroyRef))
      .subscribe(() => this.onDerivePathParams());

    this.controls.hangingWall.valueChanges
      .pipe(takeUntilDestroyed(this.destroyRef))
      .subscribe(() => this.onHangingWall());
  }

  private onDerivePathParams(): void {
    const {derivePathParams, hangingWall, rX} = this.form.getRawValue();

    if (derivePathParams) {
      if (rX >= 0 !== hangingWall) {
        this.controls.hangingWall.setValue(rX >= 0);
      }
      this.controls.hangingWall.enable();
      this.controls.rJB.disable();
      this.controls.rRup.disable();
      this.service.calcPathParameters(this.form);
    } else {
      this.controls.hangingWall.setValue(null);
      this.controls.hangingWall.disable();
      this.controls.rJB.enable();
      this.controls.rRup.enable();
    }

    this.service.resetState();
  }

  private onHangingWall(): void {
    const values = this.form.getRawValue();
    const rX = values.hangingWall ? Math.abs(values.rX) : -Math.abs(values.rX);

    if (values.rX !== rX) {
      this.controls.rX.setValue(rX);
    }
    this.service.calcPathParameters(this.form);
    this.service.resetState();
  }

  private onRx(): void {
    const {derivePathParams, hangingWall, rX} = this.form.getRawValue();

    if (derivePathParams && rX >= 0 !== hangingWall) {
      this.controls.hangingWall.patchValue(rX >= 0);
    }

    this.service.calcPathParameters(this.form);
    this.service.resetState();
  }
}
<!-- Path Parameters -->
<nshmp-section label="Path Parameters">
  <div class="grid-row grid-gap-1">
    <!-- Path Parameters: rX input -->
    <mat-form-field class="grid-col-4 rx-input">
      <mat-label>
        R<sub>X</sub> (km)
        <span class="form-required">*</span>
      </mat-label>
      <input
        matInput
        [max]="parameters()?.rX?.max"
        [min]="parameters()?.rX?.min"
        [formControl]="form.controls.rX"
        step="0.5"
        type="number"
      />
      <mat-error>
        [
        {{ parameters()?.rX?.min }},
        {{ parameters()?.rX?.max }}
        ]
      </mat-error>
    </mat-form-field>

    <!-- Path Parameters: rRup input -->
    <mat-form-field class="grid-col-4 rrup-input">
      <mat-label>
        R<sub>RUP</sub> (km)
        <span class="form-required">*</span>
      </mat-label>
      <input
        matInput
        [max]="parameters()?.rRup?.max"
        [min]="parameters()?.rRup?.min"
        [formControl]="form.controls.rRup"
        step="0.5"
        type="number"
      />
      <mat-error>
        [
        {{ parameters()?.rRup?.min }},
        {{ parameters()?.rRup?.max }}
        ]
      </mat-error>
    </mat-form-field>

    <!-- Path Parameters: rJB input -->
    <mat-form-field class="grid-col-4 rjb-input">
      <mat-label>
        R<sub>JB</sub> (km)
        <span class="form-required">*</span>
      </mat-label>
      <input
        matInput
        [max]="parameters()?.rJB?.max"
        [min]="parameters()?.rJB?.min"
        [formControl]="form.controls.rJB"
        step="0.5"
        type="number"
      />
      <mat-error>
        [
        {{ parameters()?.rJB?.min }},
        {{ parameters()?.rJB?.max }}
        ]
      </mat-error>
    </mat-form-field>
  </div>

  <!-- Path Parameters: Derive rJB and rRup -->
  <div class="grid-row">
    <mat-checkbox
      class="grid-col-12 rjb-rrup-checkbox"
      [formControl]="form.controls.derivePathParams"
    >
      Derive R<sub>JB</sub> and R<sub>RUP</sub>
    </mat-checkbox>
  </div>

  <!-- Path Parameters: Hanging wall or footwall -->
  <mat-button-toggle-group
    class="grid-col-12 hanging-wall-button"
    [formControl]="form.controls.hangingWall"
  >
    <mat-button-toggle class="grid-col-6" [value]="true"> Hanging Wall </mat-button-toggle>
    <mat-button-toggle class="grid-col-6" [value]="false"> Footwall </mat-button-toggle>
  </mat-button-toggle-group>
</nshmp-section>
Legend
Html element
Component
Html element with directive

results matching ""

    No results matching ""