Browse Source

refactor: consider request handles with tab saveContext resolution for collection move/reorder actions

jamesgeorge007 10 months ago
parent
commit
560ece209b

+ 11 - 0
packages/hoppscotch-common/src/components/new-collections/rest/index.vue

@@ -1708,6 +1708,17 @@ const dropRequest = async (payload: {
 
   // If there is a tab attached to this request, update the document `inheritedProperties`
   if (possibleTab) {
+    // @ts-expect-error - Updating the handle
+    possibleTab.value.document.saveContext.requestHandle.data = {
+      // @ts-expect-error - Updating the handle
+      ...possibleTab.value.document.saveContext.requestHandle.data,
+      collectionID: destinationCollectionIndex,
+      requestID: `${destinationCollectionIndex}/${(
+        getRequestsByPath(restCollectionState.value, destinationCollectionIndex)
+          .length - 1
+      ).toString()}`,
+    }
+
     possibleTab.value.document.inheritedProperties = {
       auth,
       headers,

+ 52 - 15
packages/hoppscotch-common/src/helpers/collection/collection.ts

@@ -9,6 +9,8 @@ import { runGQLQuery } from "../backend/GQLClient"
 import { GetSingleRequestDocument } from "../backend/graphql"
 import { HoppInheritedProperty } from "../types/HoppInheritedProperties"
 import { getAffectedIndexes } from "./affectedIndex"
+import { WorkspaceRequest } from "~/services/new-workspace/workspace"
+import { HandleRef } from "~/services/new-workspace/handle"
 
 /**
  * Resolve save context on reorder
@@ -74,10 +76,17 @@ export function resolveSaveContextOnCollectionReorder(
       return false
     }
 
-    const collectionID = tab.document.saveContext.requestID
-      .split("/")
-      .slice(0, -1)
-      .join("/")
+    const requestHandle = tab.document.saveContext.requestHandle as
+      | HandleRef<WorkspaceRequest>["value"]
+      | undefined
+
+    if (!requestHandle || requestHandle.type === "invalid") {
+      return false
+    }
+
+    const { requestID } = requestHandle.data
+
+    const collectionID = requestID.split("/").slice(0, -1).join("/")
 
     return affectedPaths.has(collectionID)
   })
@@ -91,20 +100,34 @@ export function resolveSaveContextOnCollectionReorder(
     }
 
     if (
-      tab.value.document.saveContext?.originLocation ===
+      tab.value.document.saveContext?.originLocation !==
       "workspace-user-collection"
     ) {
-      const collectionID = tab.value.document.saveContext.requestID
-        .split("/")
-        .slice(0, -1)
-        .join("/")
+      return false
+    }
 
-      const newCollectionID = affectedPaths.get(collectionID)
-      const newRequestID = `${newCollectionID}/${
-        tab.value.document.saveContext.requestID.split("/").slice(-1)[0]
-      }`
+    const requestHandle = tab.value.document.saveContext.requestHandle as
+      | HandleRef<WorkspaceRequest>["value"]
+      | undefined
 
-      tab.value.document.saveContext.requestID = newRequestID
+    if (!requestHandle || requestHandle.type === "invalid") {
+      return false
+    }
+
+    const { requestID } = requestHandle.data
+
+    const collectionID = requestID.split("/").slice(0, -1).join("/")
+
+    const newCollectionID = affectedPaths.get(collectionID)
+    const newRequestID = `${newCollectionID}/${
+      tab.value.document.saveContext.requestID.split("/").slice(-1)[0]
+    }`
+
+    tab.value.document.saveContext.requestID = newRequestID
+    requestHandle.data = {
+      ...requestHandle.data,
+      collectionID: newCollectionID!,
+      requestID: newRequestID,
     }
   }
 }
@@ -146,7 +169,15 @@ export function updateSaveContextForAffectedRequests(
     if (
       tab.document.saveContext?.originLocation === "workspace-user-collection"
     ) {
-      const { requestID } = tab.document.saveContext
+      const requestHandle = tab.document.saveContext.requestHandle as
+        | HandleRef<WorkspaceRequest>["value"]
+        | undefined
+
+      if (!requestHandle || requestHandle.type === "invalid") {
+        return false
+      }
+
+      const { requestID } = requestHandle.data
 
       const collectionID = requestID.split("/").slice(0, -1).join("/")
       const requestIndex = requestID.split("/").slice(-1)[0]
@@ -162,6 +193,12 @@ export function updateSaveContextForAffectedRequests(
           ...tab.document.saveContext,
           requestID: newRequestID,
         }
+
+        requestHandle.data = {
+          ...requestHandle.data,
+          collectionID: newCollectionID,
+          requestID: newRequestID,
+        }
       }
     }
   }

+ 0 - 24
packages/hoppscotch-common/src/services/new-workspace/providers/personal.workspace.ts

@@ -626,30 +626,6 @@ export class PersonalWorkspaceProviderService
       destinationCollectionID
     )
 
-    for (const [idx, handle] of this.issuedHandles.entries()) {
-      if (handle.value.type === "invalid") continue
-
-      if ("requestID" in handle.value.data) {
-        if (
-          handle.value.data.requestID === requestHandle.value.data.requestID
-        ) {
-          const destinationRequestID = `${destinationCollectionID}/${(
-            getRequestsByPath(
-              this.restCollectionState.value.state,
-              destinationCollectionID
-            ).length - 1
-          ).toString()}`
-
-          // @ts-expect-error - We're updating the request handle data
-          this.issuedHandles[idx].value.data.collectionID =
-            destinationCollectionID
-
-          // @ts-expect-error - We're updating the request handle data
-          this.issuedHandles[idx].value.data.requestID = destinationRequestID
-        }
-      }
-    }
-
     return Promise.resolve(E.right(undefined))
   }