refactor: move more things to handles instead of handleref

This commit is contained in:
Andrew Bastin
2024-05-08 22:59:03 +05:30
committed by jamesgeorge007
parent 2f2273ee2c
commit c8f0142b16
17 changed files with 398 additions and 372 deletions

View File

@@ -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(

View File

@@ -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

View File

@@ -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("/")
}
}

View File

@@ -3,7 +3,7 @@ import { HoppRESTResponse } from "../types/HoppRESTResponse"
import { HoppTestResult } from "../types/HoppTestResult"
import { RESTOptionTabs } from "~/components/http/RequestOptions.vue"
import { HoppInheritedProperty } from "../types/HoppInheritedProperties"
import { HandleRef } from "~/services/new-workspace/handle"
import { Handle } from "~/services/new-workspace/handle"
import { WorkspaceRequest } from "~/services/new-workspace/workspace"
export type HoppRESTSaveContext =
@@ -31,7 +31,7 @@ export type HoppRESTSaveContext =
/**
* Handle to the request open in the tab
*/
requestHandle?: HandleRef<WorkspaceRequest>
requestHandle?: Handle<WorkspaceRequest>
}
| {
/**

View File

@@ -0,0 +1,17 @@
/**
* Create a function that will only run the given function once and caches the result.
*/
export function lazy<T>(fn: () => T): () => T {
let funcRan = false
let result: T | null = null
return () => {
if (!funcRan) {
result = fn()
funcRan = true
return result
}
return result!
}
}