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