components/control-panel/control-panel.component.ts
Control panel form fields and buttons to call response spectra service.
OnInit
| changeDetection | ChangeDetectionStrategy.OnPush |
| host | { |
| selector | app-control-panel |
| imports |
NshmpGmmMenuComponent
NshmpGmmPlotOptionsControlPanelComponent
NshmpGmmMultiParamMenuComponent
NshmpControlPanelButtonsComponent
EventParametersComponent
SourceParametersComponent
PathParametersComponent
SiteParametersComponent
ReactiveFormsModule
NshmpSectionComponent
MatFormField
MatSelect
MatOption
MatLabel
|
| templateUrl | ./control-panel.component.html |
| styleUrl | ./control-panel.component.scss |
Properties |
Methods |
|
constructor()
|
| ngOnInit |
ngOnInit()
|
|
Returns :
void
|
| Private onGmmSource |
onGmmSource()
|
|
Returns :
void
|
| Private onMultiSelectableParam |
onMultiSelectableParam()
|
|
Returns :
void
|
| Private onShowEpistemicUncertainty |
onShowEpistemicUncertainty()
|
|
Returns :
void
|
| onSubmit |
onSubmit()
|
|
On form submit.
Returns :
void
|
| controls |
Default value : this.service.formGroup.controls
|
|
Form controls state |
| Private destroyRef |
Default value : inject(DestroyRef)
|
| form |
Default value : this.service.formGroup
|
|
Control panel form field state |
| gmmSelected |
Default value : this.controls.gmmSource.getRawValue()?.length > 0
|
|
Whether a GMM has been selected |
| nshmpService |
Default value : inject(NshmpService)
|
| parameters |
Default value : computed(() => this.service.usage()?.response.parameters)
|
|
Usage parameters |
| Params |
Default value : MultiSelectableParam
|
| service |
Default value : inject(AppService)
|
| serviceCallInfo |
Default value : this.service.serviceCallInfo
|
|
Service call info state |
| supportedImts |
Default value : this.service.supportedImts
|
|
Supported IMTs based on GMMs selected |
| templateService |
Default value : inject(NshmpTemplateService)
|
import {
ChangeDetectionStrategy,
Component,
computed,
DestroyRef,
effect,
inject,
OnInit,
} from '@angular/core';
import {takeUntilDestroyed} from '@angular/core/rxjs-interop';
import {ReactiveFormsModule} from '@angular/forms';
import {MatFormField, MatLabel} from '@angular/material/form-field';
import {MatOption, MatSelect} from '@angular/material/select';
import {
MultiSelectableParam,
NshmpGmmMenuComponent,
NshmpGmmMultiParamMenuComponent,
NshmpGmmPlotOptionsControlPanelComponent,
VS30_COMMON_VALUES,
} from '@ghsc/nshmp-lib-ng/gmm';
import {
NshmpControlPanelButtonsComponent,
NshmpSectionComponent,
NshmpService,
} from '@ghsc/nshmp-lib-ng/nshmp';
import {NshmpTemplateService} from '@ghsc/nshmp-template';
import {AppService} from '../../services/app.service';
import {EventParametersComponent} from '../event-parameters/event-parameters.component';
import {PathParametersComponent} from '../path-parameters/path-parameters.component';
import {SiteParametersComponent} from '../site-parameters/site-parameters.component';
import {SourceParametersComponent} from '../source-parameters/source-parameters.component';
/**
* Control panel form fields and buttons to call response spectra service.
*/
@Component({
changeDetection: ChangeDetectionStrategy.OnPush,
host: {id: 'gmm-spectra-control-panel'},
imports: [
NshmpGmmMenuComponent,
NshmpGmmPlotOptionsControlPanelComponent,
NshmpGmmMultiParamMenuComponent,
NshmpControlPanelButtonsComponent,
EventParametersComponent,
SourceParametersComponent,
PathParametersComponent,
SiteParametersComponent,
ReactiveFormsModule,
NshmpSectionComponent,
MatFormField,
MatSelect,
MatOption,
MatLabel,
],
selector: 'app-control-panel',
styleUrl: './control-panel.component.scss',
templateUrl: './control-panel.component.html',
})
export class ControlPanelComponent implements OnInit {
service = inject(AppService);
nshmpService = inject(NshmpService);
templateService = inject(NshmpTemplateService);
private destroyRef = inject(DestroyRef);
Params = MultiSelectableParam;
/** Form controls state */
controls = this.service.formGroup.controls;
/** Control panel form field state */
form = this.service.formGroup;
/** Whether a GMM has been selected */
gmmSelected = this.controls.gmmSource.getRawValue()?.length > 0;
/** Usage parameters */
parameters = computed(() => this.service.usage()?.response.parameters);
/** Service call info state */
serviceCallInfo = this.service.serviceCallInfo;
/** Supported IMTs based on GMMs selected */
supportedImts = this.service.supportedImts;
constructor() {
effect(() => {
const developmentMode = this.templateService.developmentMode();
const parameters = this.parameters();
if (developmentMode) {
this.form.patchValue({
damping: this.form.value.damping ?? parameters?.damping?.value,
});
} else {
this.form.patchValue({
damping: null,
dampingMulti: [],
multiSelectableParam: MultiSelectableParam.GMM,
});
}
});
}
ngOnInit(): void {
this.controls.gmmSource.valueChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {
this.onGmmSource();
});
this.controls.multiSelectableParam.valueChanges
.pipe(takeUntilDestroyed(this.destroyRef))
.subscribe(() => this.onMultiSelectableParam());
this.controls.showEpistemicUncertainty.valueChanges
.pipe(takeUntilDestroyed(this.destroyRef))
.subscribe(() => this.onShowEpistemicUncertainty());
}
/**
* On form submit.
*/
onSubmit(): void {
this.service.callService();
this.nshmpService.selectPlotControl();
}
private onGmmSource() {
this.service.resetState();
}
private onMultiSelectableParam(): void {
if (!this.service.state().usageResponse) {
return;
}
const {multiSelectableParam} = this.form.getRawValue();
const parameters = this.service.state().usageResponse.response.parameters;
this.form.patchValue({
dampingMulti: [],
gmmSource: [],
MwMulti: [],
vs30Multi: [],
});
switch (multiSelectableParam) {
case MultiSelectableParam.DAMPING: {
this.controls.dampingMulti.setValue(parameters.damping.values);
break;
}
case MultiSelectableParam.GMM: {
break;
}
case MultiSelectableParam.MW: {
this.controls.Mw.setValue(parameters.Mw.value as number);
this.controls.MwMulti.setValue([4, 5, 6, 7, 8]);
break;
}
case MultiSelectableParam.VS30: {
this.controls.vs30.setValue(parameters.vs30.value as number);
this.controls.vs30Multi.setValue(
VS30_COMMON_VALUES.filter(entry => entry.value >= 150 && entry.value <= 1500).map(
entry => entry.value,
),
);
break;
}
}
this.controls.gmmSource.markAsPristine();
this.service.resetState();
}
private onShowEpistemicUncertainty(): void {
this.service.createPlots();
}
}
<!-- Response Spectra Conrol Panel -->
<form
class="control-panel height-full overflow-auto"
[formGroup]="form"
(submit)="onSubmit()"
novalidate
>
<nshmp-gmm-multi-param-menu
[multiParamControl]="controls.multiSelectableParam"
[showDamping]="templateService.developmentMode()"
/>
<!-- GMM menu -->
<nshmp-gmm-menu
[gmmControl]="controls.gmmSource"
[gmmGroupTypeControl]="controls.gmmGroupType"
[multiple]="controls.multiSelectableParam.value === 'gmm'"
[parameters]="parameters()"
/>
<app-event-parameters />
<app-source-parameters />
<app-path-parameters />
<app-site-parameters />
<nshmp-gmm-plot-options-control-panel
[showEpistemicFormControl]="controls.showEpistemicUncertainty"
/>
<!-- Developer options -->
@if (templateService.developmentMode()) {
<nshmp-section label="Developer Options">
<div class="gird-col-12">
@let damping = parameters()?.damping;
<!-- Damping -->
@if (form.value.damping !== undefined && form.value.damping !== null) {
<mat-form-field>
<mat-label>Damping</mat-label>
@if (form.value.multiSelectableParam === Params.DAMPING) {
<mat-select
[formControl]="form.controls.dampingMulti"
[multiple]="true"
placeholder="Select Values"
>
@for (value of damping?.values; track value) {
<mat-option [value]="value">{{ value }} {{ damping?.units }}</mat-option>
}
</mat-select>
} @else {
<mat-select [formControl]="form.controls.damping">
@for (value of damping?.values; track value) {
<mat-option [value]="value">{{ value }} {{ damping?.units }}</mat-option>
}
</mat-select>
}
</mat-form-field>
}
</div>
</nshmp-section>
}
<nshmp-control-panel-buttons
[plotDisabled]="form.invalid"
[serviceCallInfo]="serviceCallInfo()"
[resetDisabled]="form.pristine"
(resetClick)="service.resetControlPanel()"
/>
</form>