refactor: move more things to handles instead of handleref
This commit is contained in:
committed by
jamesgeorge007
parent
2f2273ee2c
commit
c8f0142b16
@@ -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(
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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("/")
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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>
|
||||
}
|
||||
| {
|
||||
/**
|
||||
|
||||
17
packages/hoppscotch-common/src/helpers/utils/lazy.ts
Normal file
17
packages/hoppscotch-common/src/helpers/utils/lazy.ts
Normal 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!
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user