From dc16cb393ea83a135ff168a1f9b24ccc3c63bd6f Mon Sep 17 00:00:00 2001
From: Matthew Raymer <mraymer@osinetwork.net>
Date: Tue, 25 Feb 2025 09:03:18 +0000
Subject: [PATCH] refactor: move ProviderInfo interface to claims-result.ts

- Move ProviderInfo interface from ClaimView.vue to claims-result.ts
- Add JSDoc documentation to interface properties
- Update imports in ClaimView.vue
- Clean up route handling using vue-router types
- Remove outdated browser compatibility comment

This improves type organization and documentation while reducing
component-level interface definitions.
---
 src/interfaces/claims-result.ts | 11 +++++++
 src/main.capacitor.ts           |  8 ++---
 src/router/index.ts             |  4 +--
 src/views/ClaimView.vue         | 55 +++++++++++++--------------------
 4 files changed, 38 insertions(+), 40 deletions(-)

diff --git a/src/interfaces/claims-result.ts b/src/interfaces/claims-result.ts
index 30b524ec..d8f60f0c 100644
--- a/src/interfaces/claims-result.ts
+++ b/src/interfaces/claims-result.ts
@@ -37,6 +37,17 @@ export interface WorldProperties {
   endTime?: string;
 }
 
+export interface ProviderInfo {
+  /**
+   * Could be a DID or a handleId that identifies the provider
+   */
+  identifier: string;
+  /**
+   * Indicates if the provider link has been confirmed
+   */
+  linkConfirmed: boolean;
+}
+
 // Type for createAndSubmitClaim result
 export type CreateAndSubmitClaimResult = SuccessResult | ErrorResult;
 
diff --git a/src/main.capacitor.ts b/src/main.capacitor.ts
index bc662144..3dcfd6ed 100644
--- a/src/main.capacitor.ts
+++ b/src/main.capacitor.ts
@@ -97,15 +97,15 @@ const handleDeepLink = async (data: { url: string }) => {
     const paramRoutes = {
       "claim-add-raw": /^claim-add-raw\/(.+)$/,
       "claim-cert": /^claim-cert\/(.+)$/,
-      claim: /^claim\/(.+)$/,
+      "claim": /^claim\/(.+)$/,
       "confirm-gift": /^confirm-gift\/(.+)$/,
       "contact-edit": /^contact-edit\/(.+)$/,
       "contact-import": /^contact-import\/(.+)$/,
-      did: /^did\/(.+)$/,
+      "did": /^did\/(.+)$/,
       "invite-one-accept": /^invite-one-accept\/(.+)$/,
       "offer-details": /^offer-details\/(.+)$/,
-      project: /^project\/(.+)$/,
-      userProfile: /^userProfile\/(.+)$/,
+      "project": /^project\/(.+)$/,
+      "user-profile": /^user-profile\/(.+)$/,
     };
 
     // Match route pattern and extract parameter
diff --git a/src/router/index.ts b/src/router/index.ts
index 3d077e69..94b4ff51 100644
--- a/src/router/index.ts
+++ b/src/router/index.ts
@@ -276,8 +276,8 @@ const routes: Array<RouteRecordRaw> = [
     component: () => import("../views/TestView.vue"),
   },
   {
-    path: "/userProfile/:id?",
-    name: "userProfile",
+    path: "/user-profile/:id?",
+    name: "user-profile",
     component: () => import("../views/UserProfileView.vue"),
   },
 ];
diff --git a/src/views/ClaimView.vue b/src/views/ClaimView.vue
index 2a2ebe43..ad51b09d 100644
--- a/src/views/ClaimView.vue
+++ b/src/views/ClaimView.vue
@@ -505,7 +505,7 @@ import { AxiosError } from "axios";
 import * as yaml from "js-yaml";
 import * as R from "ramda";
 import { Component, Vue } from "vue-facing-decorator";
-import { Router } from "vue-router";
+import { Router, RouteLocationNormalizedLoaded } from "vue-router";
 import { useClipboard } from "@vueuse/core";
 
 import GiftedDialog from "../components/GiftedDialog.vue";
@@ -518,22 +518,20 @@ import {
 } from "../db/index";
 import { Contact } from "../db/tables/contacts";
 import * as serverUtil from "../libs/endorserServer";
-import {
-  GenericCredWrapper,
+import { 
+  GenericCredWrapper, 
   OfferVerifiableCredential,
-} from "../libs/endorserServer";
+  ProviderInfo 
+} from '../interfaces';
 import * as libsUtil from "../libs/util";
 
-interface ProviderInfo {
-  identifier: string; // could be a DID or a handleId
-  linkConfirmed: boolean;
-}
-
 @Component({
   components: { GiftedDialog, QuickNav },
 })
 export default class ClaimView extends Vue {
   $notify!: (notification: NotificationIface, timeout?: number) => void;
+  $route!: RouteLocationNormalizedLoaded;
+  $router!: Router;
 
   activeDid = "";
   allMyDids: Array<string> = [];
@@ -595,41 +593,30 @@ export default class ClaimView extends Vue {
     try {
       this.allMyDids = await libsUtil.retrieveAccountDids();
     } catch (error) {
-      // continue because we want to see claims, even anonymously
       logConsoleAndDb(
         "Error retrieving all account DIDs on home page:" + error,
         true,
       );
-      this.$notify(
-        {
-          group: "alert",
-          type: "danger",
-          title: "Error Loading Profile",
-          text: "See the Help page for problems with your personal data.",
-        },
-        5000,
-      );
+      this.$notify({
+        group: "alert",
+        type: "danger",
+        title: "Error Loading Profile",
+        text: "See the Help page for problems with your personal data.",
+      }, 5000);
     }
 
-    const pathParam = window.location.pathname.substring("/claim/".length);
-    let claimId;
-    if (pathParam) {
-      claimId = decodeURIComponent(pathParam);
+    const claimId = this.$route.params.id as string;
+    if (claimId) {
       await this.loadClaim(claimId, this.activeDid);
     } else {
-      this.$notify(
-        {
-          group: "alert",
-          type: "danger",
-          title: "Error",
-          text: "No claim ID was provided.",
-        },
-        5000,
-      );
+      this.$notify({
+        group: "alert",
+        type: "danger",
+        title: "Error",
+        text: "No claim ID was provided.",
+      }, 5000);
     }
 
-    // When Chrome compatibility is fixed https://developer.mozilla.org/en-US/docs/Web/API/Web_Share_API#api.navigator.canshare
-    // then use this truer check: navigator.canShare && navigator.canShare()
     this.canShare = !!navigator.share;
   }