Browse Source

refactor: move more things to handles instead of handleref

Andrew Bastin 10 months ago
parent
commit
c4ad476733

+ 4 - 2
packages/hoppscotch-common/src/components/app/Header.vue

@@ -382,8 +382,10 @@ watch(
 const newWorkspaceService = useService(NewWorkspaceService)
 
 const activeWorkspaceName = computed(() => {
-  if (newWorkspaceService.activeWorkspaceHandle.value?.value.type === "ok") {
-    return newWorkspaceService.activeWorkspaceHandle.value?.value.data.name
+  const activeWorkspaceHandleRef = newWorkspaceService.activeWorkspaceHandle.value?.get()
+
+  if (activeWorkspaceHandleRef?.value.type === "ok") {
+    return activeWorkspaceHandleRef.value.data.name
   }
 
   return t("workspace.no_workspace")

+ 0 - 5
packages/hoppscotch-common/src/components/collections/SaveRequest.vue

@@ -245,11 +245,6 @@ const saveRequestAs = async () => {
 
     const collectionHandle = collectionHandleResult.right
 
-    if (collectionHandle.value.type === "invalid") {
-      // WORKSPACE_INVALIDATED
-      return
-    }
-
     const requestHandleResult = await workspaceService.createRESTRequest(
       collectionHandle,
       updatedRequest

+ 5 - 8
packages/hoppscotch-common/src/components/http/RequestTab.vue

@@ -20,8 +20,6 @@ import { useVModel } from "@vueuse/core"
 import { cloneDeep, isEqual } from "lodash-es"
 import { HoppTab } from "~/services/tab"
 import { HoppRESTDocument } from "~/helpers/rest/document"
-import { WorkspaceRequest } from "~/services/new-workspace/workspace"
-import { HandleRef } from "~/services/new-workspace/handle"
 
 // TODO: Move Response and Request execution code to over here
 
@@ -43,24 +41,23 @@ watch(
       tab.value.document.saveContext?.originLocation ===
       "workspace-user-collection"
     ) {
-      const requestHandle = tab.value.document.saveContext.requestHandle as
-        | HandleRef<WorkspaceRequest>["value"]
-        | undefined
+      const requestHandleRef =
+        tab.value.document.saveContext.requestHandle?.get()
 
-      if (!requestHandle || requestHandle.type === "invalid") {
+      if (!requestHandleRef || requestHandleRef.value.type === "invalid") {
         return
       }
 
       if (
         !tab.value.document.isDirty &&
-        !isEqual(oldRequest, requestHandle?.data.request)
+        !isEqual(oldRequest, requestHandleRef?.value.data.request)
       ) {
         tab.value.document.isDirty = true
       }
 
       if (
         tab.value.document.isDirty &&
-        isEqual(oldRequest, requestHandle?.data.request)
+        isEqual(oldRequest, requestHandleRef?.value.data.request)
       ) {
         tab.value.document.isDirty = false
       }

+ 15 - 31
packages/hoppscotch-common/src/components/new-collections/rest/index.vue

@@ -514,7 +514,7 @@ import { platform } from "~/platform"
 import { NewWorkspaceService } from "~/services/new-workspace"
 import { HandleRef } from "~/services/new-workspace/handle"
 import { RESTCollectionViewRequest } from "~/services/new-workspace/view"
-import { Workspace, WorkspaceRequest } from "~/services/new-workspace/workspace"
+import { Workspace } from "~/services/new-workspace/workspace"
 import { RESTTabService } from "~/services/tab/rest"
 import IconImport from "~icons/lucide/folder-down"
 import IconHelpCircle from "~icons/lucide/help-circle"
@@ -1110,12 +1110,7 @@ const selectRequest = async (requestIndexPath: string) => {
     return
   }
 
-  const collectionHandle = collectionHandleResult.right.get()
-
-  if (collectionHandle.value.type === "invalid") {
-    // WORKSPACE_INVALIDATED | INVALID_COLLECTION_HANDLE
-    return
-  }
+  const collectionHandle = collectionHandleResult.right
 
   const requestHandleResult = await workspaceService.getRequestHandle(
     props.workspaceHandle,
@@ -1127,12 +1122,7 @@ const selectRequest = async (requestIndexPath: string) => {
     return
   }
 
-  const requestHandle = requestHandleResult.right.get()
-
-  if (requestHandle.value.type === "invalid") {
-    // COLLECTION_INVALIDATED
-    return
-  }
+  const requestHandle = requestHandleResult.right
 
   const cascadingAuthHeadersHandleResult =
     await workspaceService.getRESTCollectionLevelAuthHeadersView(
@@ -1163,9 +1153,11 @@ const selectRequest = async (requestIndexPath: string) => {
   if (possibleTab) {
     tabs.setActiveTab(possibleTab.value.id)
   } else {
+    const requestHandleRef = requestHandle.get()
+
     // If not, open the request in a new tab
     tabs.createNewTab({
-      request: requestHandle.value.data.request,
+      request: requestHandleRef.value.data.request,
       isDirty: false,
       saveContext: {
         originLocation: "workspace-user-collection",
@@ -1640,12 +1632,7 @@ const dropRequest = async (payload: {
     return
   }
 
-  const requestHandle = requestHandleResult.right.get()
-
-  if (requestHandle.value.type === "invalid") {
-    // COLLECTION_INVALIDATED
-    return
-  }
+  const requestHandle = requestHandleResult.right
 
   const result = await workspaceService.moveRESTRequest(
     requestHandle,
@@ -1667,12 +1654,7 @@ const dropRequest = async (payload: {
     return
   }
 
-  const collectionHandle = collectionHandleResult.right.get()
-
-  if (collectionHandle.value.type === "invalid") {
-    // WORKSPACE_INVALIDATED
-    return
-  }
+  const collectionHandle = collectionHandleResult.right
 
   const cascadingAuthHeadersHandleResult =
     await workspaceService.getRESTCollectionLevelAuthHeadersView(
@@ -2098,18 +2080,20 @@ const isActiveRequest = (requestView: RESTCollectionViewRequest) => {
     return false
   }
 
-  // TODO: Investigate why requestHandle is available unwrapped here
-  const requestHandle = tabs.currentActiveTab.value.document.saveContext
-    .requestHandle as HandleRef<WorkspaceRequest>["value"] | undefined
+  const requestHandle =
+    tabs.currentActiveTab.value.document.saveContext.requestHandle
+
   if (!requestHandle) {
     return false
   }
 
-  if (requestHandle.type === "invalid") {
+  const requestHandleRef = requestHandle.get()
+
+  if (requestHandleRef.value.type === "invalid") {
     return false
   }
 
-  return requestHandle.data.requestID === requestView.requestID
+  return requestHandleRef.value.data.requestID === requestView.requestID
 }
 
 const onSelectPick = (payload: Picked | null) => {

+ 4 - 2
packages/hoppscotch-common/src/components/workspace/Current.vue

@@ -26,8 +26,10 @@ const workspaceService = useService(NewWorkspaceService)
 const activeWorkspaceHandle = workspaceService.activeWorkspaceHandle
 
 const workspaceName = computed(() => {
-  if (activeWorkspaceHandle.value?.value.type === "ok") {
-    return activeWorkspaceHandle.value.value.data.name
+  const activeWorkspaceHandleRef = activeWorkspaceHandle.value?.get()
+
+  if (activeWorkspaceHandleRef?.value.type === "ok") {
+    return activeWorkspaceHandleRef.value.data.name
   }
 
   return undefined

+ 6 - 5
packages/hoppscotch-common/src/components/workspace/PersonalWorkspaceSelector.vue

@@ -34,12 +34,13 @@ const personalWorkspaceProviderService = useService(
 )
 
 const activeWorkspaceInfo = computed(() => {
-  const activeWorkspace = workspaceService.activeWorkspaceHandle.value
+  const activeWorkspaceHandleRef =
+    workspaceService.activeWorkspaceHandle.value?.get()
 
-  if (activeWorkspace?.value.type === "ok") {
+  if (activeWorkspaceHandleRef?.value.type === "ok") {
     return {
-      provider: activeWorkspace.value.data.providerID,
-      workspaceID: activeWorkspace.value.data.workspaceID,
+      provider: activeWorkspaceHandleRef.value.data.providerID,
+      workspaceID: activeWorkspaceHandleRef.value.data.workspaceID,
     }
   }
 
@@ -48,6 +49,6 @@ const activeWorkspaceInfo = computed(() => {
 
 function selectWorkspace() {
   workspaceService.activeWorkspaceHandle.value =
-    personalWorkspaceProviderService.getPersonalWorkspaceHandle().get()
+    personalWorkspaceProviderService.getPersonalWorkspaceHandle()
 }
 </script>

+ 6 - 5
packages/hoppscotch-common/src/components/workspace/TestWorkspaceSelector.vue

@@ -37,12 +37,13 @@ const testWorkspaceProviderService = useService(TestWorkspaceProviderService)
 const candidates = testWorkspaceProviderService.getWorkspaceCandidates()
 
 const activeWorkspaceInfo = computed(() => {
-  const activeWorkspace = workspaceService.activeWorkspaceHandle.value
+  const activeWorkspaceHandle = workspaceService.activeWorkspaceHandle.value
+  const activeWorkspaceHandleRef = activeWorkspaceHandle?.get()
 
-  if (activeWorkspace?.value.type === "ok") {
+  if (activeWorkspaceHandleRef?.value.type === "ok") {
     return {
-      provider: activeWorkspace.value.data.providerID,
-      workspaceID: activeWorkspace.value.data.workspaceID,
+      provider: activeWorkspaceHandleRef.value.data.providerID,
+      workspaceID: activeWorkspaceHandleRef.value.data.workspaceID,
     }
   }
 
@@ -59,6 +60,6 @@ async function selectWorkspace(workspaceID: string) {
     return
   }
 
-  workspaceService.activeWorkspaceHandle.value = result.right.get()
+  workspaceService.activeWorkspaceHandle.value = result.right
 }
 </script>

+ 6 - 4
packages/hoppscotch-common/src/helpers/adapters/WorkspaceRESTCollectionTreeAdapter.ts

@@ -5,7 +5,7 @@ import {
 import * as E from "fp-ts/Either"
 import { Ref, ref, watchEffect } from "vue"
 import { NewWorkspaceService } from "~/services/new-workspace"
-import { HandleRef } from "~/services/new-workspace/handle"
+import { Handle } from "~/services/new-workspace/handle"
 import { RESTCollectionViewItem } from "~/services/new-workspace/view"
 import { Workspace } from "~/services/new-workspace/workspace"
 
@@ -13,7 +13,7 @@ export class WorkspaceRESTCollectionTreeAdapter
   implements SmartTreeAdapter<RESTCollectionViewItem>
 {
   constructor(
-    private workspaceHandle: HandleRef<Workspace>,
+    private workspaceHandle: Handle<Workspace>,
     private workspaceService: NewWorkspaceService
   ) {}
 
@@ -21,7 +21,9 @@ export class WorkspaceRESTCollectionTreeAdapter
     nodeID: string | null,
     nodeType?: string
   ): Ref<ChildrenResult<RESTCollectionViewItem>> {
-    if (this.workspaceHandle.value.type !== "ok") {
+    const workspaceHandleRef = this.workspaceHandle.get()
+
+    if (workspaceHandleRef.value.type !== "ok") {
       throw new Error("Cannot issue children with invalid workspace handle")
     }
 
@@ -50,7 +52,7 @@ export class WorkspaceRESTCollectionTreeAdapter
           throw new Error(JSON.stringify(collectionHandleResult.left.error))
         }
 
-        const collectionHandle = collectionHandleResult.right.get()
+        const collectionHandle = collectionHandleResult.right
 
         const collectionChildrenResult =
           await this.workspaceService.getRESTCollectionChildrenView(

+ 14 - 81
packages/hoppscotch-common/src/helpers/collection/collection.ts

@@ -9,8 +9,6 @@ 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
@@ -67,15 +65,13 @@ export function resolveSaveContextOnCollectionReorder(payload: {
       return false
     }
 
-    const requestHandle = tab.document.saveContext.requestHandle as
-      | HandleRef<WorkspaceRequest>["value"]
-      | undefined
+    const requestHandleRef = tab.document.saveContext.requestHandle?.get()
 
-    if (!requestHandle || requestHandle.type === "invalid") {
+    if (!requestHandleRef || requestHandleRef.value.type === "invalid") {
       return false
     }
 
-    const { requestID } = requestHandle.data
+    const { requestID } = requestHandleRef.value.data
 
     const collectionID = requestID.split("/").slice(0, -1).join("/")
 
@@ -97,15 +93,13 @@ export function resolveSaveContextOnCollectionReorder(payload: {
       return false
     }
 
-    const requestHandle = tab.value.document.saveContext.requestHandle as
-      | HandleRef<WorkspaceRequest>["value"]
-      | undefined
+    const requestHandleRef = tab.value.document.saveContext.requestHandle?.get()
 
-    if (!requestHandle || requestHandle.type === "invalid") {
+    if (!requestHandleRef || requestHandleRef.value.type === "invalid") {
       return false
     }
 
-    const { requestID } = requestHandle.data
+    const { requestID } = requestHandleRef.value.data
 
     const collectionID = requestID.split("/").slice(0, -1).join("/")
 
@@ -114,8 +108,8 @@ export function resolveSaveContextOnCollectionReorder(payload: {
       requestID.split("/").slice(-1)[0]
     }`
 
-    requestHandle.data = {
-      ...requestHandle.data,
+    requestHandleRef.value.data = {
+      ...requestHandleRef.value.data,
       collectionID: newCollectionID!,
       requestID: newRequestID,
     }
@@ -159,15 +153,13 @@ export function updateSaveContextForAffectedRequests(
     if (
       tab.document.saveContext?.originLocation === "workspace-user-collection"
     ) {
-      const requestHandle = tab.document.saveContext.requestHandle as
-        | HandleRef<WorkspaceRequest>["value"]
-        | undefined
+      const requestHandleRef = tab.document.saveContext.requestHandle?.get()
 
-      if (!requestHandle || requestHandle.type === "invalid") {
+      if (!requestHandleRef || requestHandleRef.value.type === "invalid") {
         return false
       }
 
-      const { requestID } = requestHandle.data
+      const { requestID } = requestHandleRef.value.data
 
       const collectionID = requestID.split("/").slice(0, -1).join("/")
       const requestIndex = requestID.split("/").slice(-1)[0]
@@ -184,8 +176,8 @@ export function updateSaveContextForAffectedRequests(
           requestID: newRequestID,
         }
 
-        requestHandle.data = {
-          ...requestHandle.data,
+        requestHandleRef.value.data = {
+          ...requestHandleRef.value.data,
           collectionID: newCollectionID,
           requestID: newRequestID,
         }
@@ -268,7 +260,7 @@ export function updateInheritedPropertiesForAffectedRequests(
     }
 
     const collectionID = tab.document.saveContext?.requestID
-      .split("/")
+      ?.split("/")
       .slice(0, -1)
       .join("/")
 
@@ -359,65 +351,6 @@ export function updateInheritedPropertiesForAffectedRequests(
   })
 }
 
-function resetSaveContextForAffectedRequests(folderPath: string) {
-  const tabService = getService(RESTTabService)
-  const tabs = tabService.getTabsRefTo((tab) => {
-    if (tab.document.saveContext?.originLocation === "user-collection") {
-      return tab.document.saveContext.folderPath.startsWith(folderPath)
-    }
-
-    if (
-      tab.document.saveContext?.originLocation !== "workspace-user-collection"
-    ) {
-      return false
-    }
-
-    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 collectionID.startsWith(folderPath)
-  })
-
-  for (const tab of tabs) {
-    if (tab.value.document.saveContext?.originLocation === "user-collection") {
-      tab.value.document.saveContext = null
-      tab.value.document.isDirty = true
-
-      return
-    }
-
-    if (
-      tab.value.document.saveContext?.originLocation ===
-      "workspace-user-collection"
-    ) {
-      const requestHandle = tab.value.document.saveContext.requestHandle as
-        | HandleRef<WorkspaceRequest>["value"]
-        | undefined
-
-      if (!requestHandle || requestHandle.type === "invalid") {
-        return
-      }
-
-      // @ts-expect-error - Removing the `data` property
-      delete requestHandle.data
-
-      // @ts-expect-error - Updating the type
-      requestHandle.type = "invalid"
-
-      // @ts-expect-error - Specifying the reason
-      requestHandle.reason = "REQUEST_INVALIDATED"
-    }
-  }
-}
-
 /**
  * Reset save context to null if requests are deleted from the team collection or its folder
  * only runs when collection or folder is deleted

+ 10 - 14
packages/hoppscotch-common/src/helpers/collection/request.ts

@@ -5,8 +5,6 @@ import {
 } from "@hoppscotch/data"
 
 import { getService } from "~/modules/dioc"
-import { HandleRef } from "~/services/new-workspace/handle"
-import { WorkspaceRequest } from "~/services/new-workspace/workspace"
 import { RESTTabService } from "~/services/tab/rest"
 import { getAffectedIndexes } from "./affectedIndex"
 
@@ -55,15 +53,13 @@ export function resolveSaveContextOnRequestReorder(payload: {
       return false
     }
 
-    const requestHandle = tab.document.saveContext.requestHandle as
-      | HandleRef<WorkspaceRequest>["value"]
-      | undefined
+    const requestHandleRef = tab.document.saveContext.requestHandle?.get()
 
-    if (!requestHandle || requestHandle.type === "invalid") {
+    if (!requestHandleRef || requestHandleRef.value.type === "invalid") {
       return false
     }
 
-    const { requestID } = requestHandle.data
+    const { requestID } = requestHandleRef.value.data
     const collectionID = requestID.split("/").slice(0, -1).join("/")
     const requestIndex = parseInt(requestID.split("/").slice(-1)[0])
 
@@ -85,15 +81,13 @@ export function resolveSaveContextOnRequestReorder(payload: {
       return
     }
 
-    const requestHandle = tab.value.document.saveContext.requestHandle as
-      | HandleRef<WorkspaceRequest>["value"]
-      | undefined
+    const requestHandleRef = tab.value.document.saveContext.requestHandle?.get()
 
-    if (!requestHandle || requestHandle.type === "invalid") {
+    if (!requestHandleRef || requestHandleRef.value.type === "invalid") {
       return
     }
 
-    const { requestID } = requestHandle.data
+    const { requestID } = requestHandleRef.value.data
 
     const requestIDArr = requestID.split("/")
     const requestIndex = affectedIndices.get(
@@ -102,8 +96,10 @@ export function resolveSaveContextOnRequestReorder(payload: {
 
     requestIDArr[requestIDArr.length - 1] = requestIndex.toString()
 
-    requestHandle.data.requestID = requestIDArr.join("/")
-    requestHandle.data.collectionID = requestIDArr.slice(0, -1).join("/")
+    requestHandleRef.value.data.requestID = requestIDArr.join("/")
+    requestHandleRef.value.data.collectionID = requestIDArr
+      .slice(0, -1)
+      .join("/")
   }
 }
 

Some files were not shown because too many files changed in this diff