From 50285043ac2f4ae3f4524257386b44c75d66f029 Mon Sep 17 00:00:00 2001 From: Brandon Clayton <bclayton@usgs.gov> Date: Tue, 12 Nov 2024 15:15:48 -0700 Subject: [PATCH 1/5] update dep --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 40b48ebe7..df9db7bd7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,7 +23,7 @@ "@ghsc/disagg-d3": "^0.13.0", "@ghsc/nshmp-lib-ng": "^18.21.0", "@ghsc/nshmp-template": "^18.1.0", - "@ghsc/nshmp-utils-ts": "^3.11.1", + "@ghsc/nshmp-utils-ts": "^3.12.1", "angular-plotly.js": "^6.0.0", "d3": "^7.9.0", "d3-array": "^3.2.4", @@ -4656,9 +4656,9 @@ } }, "node_modules/@ghsc/nshmp-utils-ts": { - "version": "3.11.1", - "resolved": "https://code.usgs.gov/api/v4/projects/1414/packages/npm/@ghsc/nshmp-utils-ts/-/@ghsc/nshmp-utils-ts-3.11.1.tgz", - "integrity": "sha1-E5xVq1+1RpTdwKEWt/mZre5o5B8=", + "version": "3.12.1", + "resolved": "https://code.usgs.gov/api/v4/projects/1414/packages/npm/@ghsc/nshmp-utils-ts/-/@ghsc/nshmp-utils-ts-3.12.1.tgz", + "integrity": "sha1-0cg/hAq/NC137uwAtJB3rrDEyHM=", "dependencies": { "@types/d3-format": "^3.0.4", "@types/geojson": "^7946.0.14", diff --git a/package.json b/package.json index 45c11c603..e128ab4f2 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,7 @@ "@ghsc/disagg-d3": "^0.13.0", "@ghsc/nshmp-lib-ng": "^18.21.0", "@ghsc/nshmp-template": "^18.1.0", - "@ghsc/nshmp-utils-ts": "^3.11.1", + "@ghsc/nshmp-utils-ts": "^3.12.1", "angular-plotly.js": "^6.0.0", "d3": "^7.9.0", "d3-array": "^3.2.4", -- GitLab From 4e4ab9472e8cba51db757ce06518145046f7c57c Mon Sep 17 00:00:00 2001 From: Brandon Clayton <bclayton@usgs.gov> Date: Tue, 12 Nov 2024 15:16:38 -0700 Subject: [PATCH 2/5] call init --- .../src/app/ncm/geophysical-profiles/app.component.ts | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/projects/nshmp-apps/src/app/ncm/geophysical-profiles/app.component.ts b/projects/nshmp-apps/src/app/ncm/geophysical-profiles/app.component.ts index c84f4c286..9d103b8ff 100644 --- a/projects/nshmp-apps/src/app/ncm/geophysical-profiles/app.component.ts +++ b/projects/nshmp-apps/src/app/ncm/geophysical-profiles/app.component.ts @@ -1,4 +1,4 @@ -import {Component} from '@angular/core'; +import {Component, OnInit} from '@angular/core'; import {NshmpLibNgAboutPageComponent} from '@ghsc/nshmp-lib-ng/about'; import {NshmpLibNgTemplateComponent} from '@ghsc/nshmp-lib-ng/nshmp'; import { @@ -14,6 +14,7 @@ import {AboutComponent} from './components/about/about.component'; import {ContentComponent} from './components/content/content.component'; import {ControlPanelComponent} from './components/control-panel/control-panel.component'; import {PlotSettingsPanelComponent} from './components/plot-settings-panel/plot-settings-panel.component'; +import {AppService} from './services/app.service'; @Component({ imports: [ @@ -33,10 +34,16 @@ import {PlotSettingsPanelComponent} from './components/plot-settings-panel/plot- styleUrl: './app.component.scss', templateUrl: './app.component.html', }) -export class AppComponent { +export class AppComponent implements OnInit { /** Navigation list for menu */ navigationList = navigation(); /** Application title */ title = apps().ncm.geophysicalProfiles.display; + + constructor(private service: AppService) {} + + ngOnInit(): void { + this.service.init(); + } } -- GitLab From fe093aabb291da50bed7979fac6765657437c366 Mon Sep 17 00:00:00 2001 From: Brandon Clayton <bclayton@usgs.gov> Date: Tue, 12 Nov 2024 15:16:45 -0700 Subject: [PATCH 3/5] add control form --- .../ncm/geophysical-profiles/models/control-form.model.ts | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 projects/nshmp-apps/src/app/ncm/geophysical-profiles/models/control-form.model.ts diff --git a/projects/nshmp-apps/src/app/ncm/geophysical-profiles/models/control-form.model.ts b/projects/nshmp-apps/src/app/ncm/geophysical-profiles/models/control-form.model.ts new file mode 100644 index 000000000..bcdbdfeaa --- /dev/null +++ b/projects/nshmp-apps/src/app/ncm/geophysical-profiles/models/control-form.model.ts @@ -0,0 +1,7 @@ +export interface ControlForm { + depthInc: number; + depthMax: number; + depthMin: number; + latitude: number; + longitude: number; +} -- GitLab From 7e0722fe996e8f5888ae62bc06ad4e3926e3a9b2 Mon Sep 17 00:00:00 2001 From: Brandon Clayton <bclayton@usgs.gov> Date: Tue, 12 Nov 2024 15:16:53 -0700 Subject: [PATCH 4/5] add state interface --- .../ncm/geophysical-profiles/models/state.model.ts | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 projects/nshmp-apps/src/app/ncm/geophysical-profiles/models/state.model.ts diff --git a/projects/nshmp-apps/src/app/ncm/geophysical-profiles/models/state.model.ts b/projects/nshmp-apps/src/app/ncm/geophysical-profiles/models/state.model.ts new file mode 100644 index 000000000..c6ab8ee5c --- /dev/null +++ b/projects/nshmp-apps/src/app/ncm/geophysical-profiles/models/state.model.ts @@ -0,0 +1,11 @@ +import {ServiceCallInfo} from '@ghsc/nshmp-lib-ng/nshmp'; +import { + GeophysicalResponse, + GeophysicalUsage, +} from '@ghsc/nshmp-utils-ts/libs/ncm/geophysical'; + +export interface AppState { + serviceCallInfo: ServiceCallInfo; + serviceResponse: GeophysicalResponse; + usageResponse: GeophysicalUsage; +} -- GitLab From 9cc3dccb1e0e8545895472179842f1645caac71f Mon Sep 17 00:00:00 2001 From: Brandon Clayton <bclayton@usgs.gov> Date: Tue, 12 Nov 2024 15:17:00 -0700 Subject: [PATCH 5/5] add initial service --- .../services/app.service.ts | 109 ++++++++++++++++++ 1 file changed, 109 insertions(+) create mode 100644 projects/nshmp-apps/src/app/ncm/geophysical-profiles/services/app.service.ts diff --git a/projects/nshmp-apps/src/app/ncm/geophysical-profiles/services/app.service.ts b/projects/nshmp-apps/src/app/ncm/geophysical-profiles/services/app.service.ts new file mode 100644 index 000000000..1191aa0bb --- /dev/null +++ b/projects/nshmp-apps/src/app/ncm/geophysical-profiles/services/app.service.ts @@ -0,0 +1,109 @@ +import {Injectable, signal} from '@angular/core'; +import {FormBuilder} from '@angular/forms'; +import {NshmpService, SpinnerService} from '@ghsc/nshmp-lib-ng/nshmp'; +import {GeophysicalUsage} from '@ghsc/nshmp-utils-ts/libs/ncm/geophysical'; +import deepEqual from 'deep-equal'; +import {environment} from 'projects/nshmp-apps/src/environments/environment'; +import {AppServiceModel} from 'projects/nshmp-apps/src/shared/models/app-service.model'; +import {SharedService} from 'projects/nshmp-apps/src/shared/services/shared.service'; +import {catchError} from 'rxjs'; + +import {ControlForm} from '../models/control-form.model'; +import {AppState} from '../models/state.model'; + +/** + * NCM geophysical profiles application service. + */ +@Injectable({ + providedIn: 'root', +}) +export class AppService + extends SharedService + implements AppServiceModel<AppState, ControlForm> +{ + private ncm = environment.webServices.ncm; + private serviceUrl = `${this.ncm.url}${this.ncm.services.geophysical}`; + + /** Form group */ + formGroup = this.formBuilder.group<ControlForm>(this.defaultFormValues()); + /** State */ + state = signal<AppState>(this.initialState()); + + constructor( + private formBuilder: FormBuilder, + private spinnerService: SpinnerService, + private nshmpService: NshmpService + ) { + super(); + } + + addValidators(): void { + throw new Error('Method not implemented.'); + } + + callService(): void { + throw new Error('Method not implemented.'); + } + + defaultFormValues(): ControlForm { + return { + depthInc: 100, + depthMax: 2000, + depthMin: 0, + latitude: null, + longitude: null, + }; + } + + init(): void { + const spinnerRef = this.spinnerService.show( + SpinnerService.MESSAGE_METADATA + ); + + this.nshmpService + .callService$<GeophysicalUsage>(this.serviceUrl) + .pipe( + catchError((error: Error) => { + spinnerRef.close(); + return this.nshmpService.throwError$(error); + }) + ) + .subscribe(usageResponse => { + spinnerRef.close(); + + this.updateState({ + serviceCallInfo: { + ...this.state().serviceCallInfo, + usage: [this.serviceUrl], + }, + usageResponse, + }); + }); + } + + initialState(): AppState { + return { + serviceCallInfo: { + serviceCalls: [], + serviceName: 'Geophysical profiles', + usage: [], + }, + serviceResponse: null, + usageResponse: null, + }; + } + + updateState(state: Partial<AppState>): void { + const updatedState = { + ...this.state(), + ...state, + }; + + if (!deepEqual(updatedState, this.state())) { + this.state.set({ + ...this.state(), + ...state, + }); + } + } +} -- GitLab