import {ChangeDetectionStrategy, Component, inject} from '@angular/core';
import {gmmUtils} from '@ghsc/nshmp-lib-ng/gmm';
import {
ConnectedApplication,
ConnectedApplicationParameter,
NshmpConnectedApplicationsComponent,
} from '@ghsc/nshmp-lib-ng/nshmp';
import {apps} from 'projects/nshmp-apps/src/shared/utils/applications.utils';
import {map, Observable} from 'rxjs';
import {AppService} from '../../services/app.service';
@Component({
changeDetection: ChangeDetectionStrategy.OnPush,
imports: [NshmpConnectedApplicationsComponent],
selector: 'app-connected-applications',
styleUrl: './connected-applications.component.scss',
templateUrl: './connected-applications.component.html',
})
export class ConnectedApplicationsComponent {
private service = inject(AppService);
private formGroup = this.service.formGroup;
connectedApplications: ConnectedApplication[] = [
{
application: apps().gmm.magnitude,
description:
'Open the Ground Motion vs. Magnitude application using the current controls inputs',
parameters$: this.magnitudeParameters$(),
},
{
application: apps().gmm.spectra,
description: 'Open the Reponse Spectra application using the current controls inputs',
parameters$: this.spectraParameters$(),
},
];
private magnitudeParameters$(): Observable<ConnectedApplicationParameter[]> {
return this.formGroup.valueChanges.pipe(
map(values => {
const parameters: ConnectedApplicationParameter[] = [
{
gridColumn: 12,
key: 'gmm',
keyDisplay: 'Ground Motion Models',
value: gmmUtils.gmmSourceToQuery(values.gmmSource ?? []),
valueDisplay: values.gmmSource?.map(gmmSource => gmmSource.gmm.display),
},
{key: 'dip', units: '°', value: values.dip},
{key: 'gmmGroupType', value: values.gmmGroupType},
{key: 'imt', value: values.imt},
{key: 'multiSelectableParam', value: values.multiSelectableParam},
{key: 'showEpistemicUncertainty', value: values.showEpistemicUncertainty},
{key: 'vs30', units: 'm/s', value: values.vs30},
{key: 'vs30Multi', value: values?.vs30Multi},
{key: 'width', units: 'km', value: values.width},
{key: 'z1p0', keyDisplay: 'Z<sub>1.0</sub>', units: 'km', value: values.z1p0},
{key: 'z2p5', keyDisplay: 'Z<sub>2.5</sub>', units: 'km', value: values.z2p5},
{key: 'zSed', keyDisplay: 'Z<sub>SED</sub>', units: 'km', value: values?.zSed},
{key: 'zTor', keyDisplay: 'Z<sub>TOR</sub>', units: 'km', value: values.zTor},
];
return parameters;
}),
);
}
private spectraParameters$(): Observable<ConnectedApplicationParameter[]> {
return this.formGroup.valueChanges.pipe(
map(values => {
const parameters: ConnectedApplicationParameter[] = [
{
gridColumn: 12,
key: 'gmm',
keyDisplay: 'Ground Motion Models',
value: gmmUtils.gmmSourceToQuery(values.gmmSource ?? []),
valueDisplay: values.gmmSource?.map(gmmSource => gmmSource.gmm.display),
},
{key: 'dip', units: '°', value: values.dip},
{key: 'gmmGroupType', value: values.gmmGroupType},
{key: 'Mw', value: values.Mw},
{key: 'MwMulti', value: values.MwMulti},
{key: 'multiSelectableParam', value: values.multiSelectableParam},
{key: 'showEpistemicUncertainty', value: values.showEpistemicUncertainty},
{key: 'vs30', units: 'm/s', value: values.vs30},
{key: 'vs30Multi', value: values?.vs30Multi},
{key: 'width', units: 'km', value: values.width},
{key: 'z1p0', keyDisplay: 'Z<sub>1.0</sub>', units: 'km', value: values.z1p0},
{key: 'z2p5', keyDisplay: 'Z<sub>2.5</sub>', units: 'km', value: values.z2p5},
{key: 'zSed', keyDisplay: 'Z<sub>SED</sub>', units: 'km', value: values?.zSed},
{key: 'zTor', keyDisplay: 'Z<sub>TOR</sub>', units: 'km', value: values.zTor},
];
return parameters;
}),
);
}
}