diff --git a/packages/hoppscotch-common/src/components/collections/SaveRequest.vue b/packages/hoppscotch-common/src/components/collections/SaveRequest.vue index 58227014f..0a40acb32 100644 --- a/packages/hoppscotch-common/src/components/collections/SaveRequest.vue +++ b/packages/hoppscotch-common/src/components/collections/SaveRequest.vue @@ -278,7 +278,7 @@ const saveRequestAs = async () => { const requestHandleResult = await workspaceService.getRequestHandle( workspaceService.activeWorkspaceHandle.value, - picked.value.folderPath + `${picked.value.folderPath}/${picked.value.requestIndex.toString()}` ) if (E.isLeft(requestHandleResult)) { diff --git a/packages/hoppscotch-common/src/components/new-collections/rest/Collection.vue b/packages/hoppscotch-common/src/components/new-collections/rest/Collection.vue index d98581db6..5980d829e 100644 --- a/packages/hoppscotch-common/src/components/new-collections/rest/Collection.vue +++ b/packages/hoppscotch-common/src/components/new-collections/rest/Collection.vue @@ -18,7 +18,7 @@ class="pointer-events-none flex min-w-0 flex-1 py-2 pr-2 transition group-hover:text-secondaryDark" > - {{ collectionView.collection.name }} + {{ collectionView.name }} @@ -170,20 +170,20 @@ const props = defineProps<{ const emit = defineEmits<{ (event: "toggle-children"): void - (event: "add-request", parentCollIndexPath: string): void - (event: "add-child-collection", parentCollIndexPath: string): void + (event: "add-request", parentCollectionIndexPath: string): void + (event: "add-child-collection", parentCollectionIndexPath: string): void ( event: "edit-root-collection", - payload: { collIndexPath: string; collectionName: string } + payload: { collectionIndexPath: string; collectionName: string } ): void ( event: "edit-child-collection", - payload: { collIndexPath: string; collectionName: string } + payload: { collectionIndexPath: string; collectionName: string } ): void - (event: "edit-collection-properties", collIndexPath: string): void + (event: "edit-collection-properties", collectionIndexPath: string): void (event: "export-data"): void - (event: "remove-root-collection", collIndexPath: string): void - (event: "remove-child-collection", collIndexPath: string): void + (event: "remove-root-collection", collectionIndexPath: string): void + (event: "remove-child-collection", collectionIndexPath: string): void }>() const tippyActions = ref(null) @@ -207,17 +207,15 @@ const addRequest = () => { } const editCollection = () => { - const { - collectionID: collIndexPath, - collection: { name: collectionName }, - } = props.collectionView + const { collectionID: collectionIndexPath, name: collectionName } = + props.collectionView const data = { - collIndexPath, + collectionIndexPath, collectionName, } - collIndexPath.split("/").length > 1 + collectionIndexPath.split("/").length > 1 ? emit("edit-child-collection", data) : emit("edit-root-collection", data) } diff --git a/packages/hoppscotch-common/src/components/new-collections/rest/index.vue b/packages/hoppscotch-common/src/components/new-collections/rest/index.vue index 7d9c62a6c..cc92c308b 100644 --- a/packages/hoppscotch-common/src/components/new-collections/rest/index.vue +++ b/packages/hoppscotch-common/src/components/new-collections/rest/index.vue @@ -83,14 +83,14 @@ /> ("") -const editingChildCollIndexPath = ref("") -const editingRootCollName = ref("") -const editingChildCollName = ref("") +const editingCollectionIndexPath = ref("") +const editingChildCollectionIndexPath = ref("") +const editingRootCollectionName = ref("") +const editingChildCollectionName = ref("") const editingRequestName = ref("") const editingRequestIndexPath = ref("") @@ -269,33 +270,34 @@ const addNewRootCollection = async (name: string) => { } const removeRootCollection = (collPathIndex: string) => { - editingCollIndexPath.value = collPathIndex + editingCollectionIndexPath.value = collPathIndex confirmModalTitle.value = `${t("confirm.remove_collection")}` displayConfirmModal(true) } const onRemoveRootCollection = async () => { - const collIndexPath = editingCollIndexPath.value + const collectionIndexPath = editingCollectionIndexPath.value - const collHandleResult = await workspaceService.getCollectionHandle( + const collectionHandleResult = await workspaceService.getCollectionHandle( props.workspaceHandle, - collIndexPath + collectionIndexPath ) - if (E.isLeft(collHandleResult)) { + if (E.isLeft(collectionHandleResult)) { // INVALID_WORKSPACE_HANDLE return } - const collHandle = collHandleResult.right + const collectionHandle = collectionHandleResult.right - if (collHandle.value.type === "invalid") { + if (collectionHandle.value.type === "invalid") { // WORKSPACE_INVALIDATED | INVALID_COLLECTION_HANDLE return } - const result = await workspaceService.removeRESTRootCollection(collHandle) + const result = + await workspaceService.removeRESTRootCollection(collectionHandle) if (E.isLeft(result)) { // INVALID_COLLECTION_HANDLE @@ -312,32 +314,32 @@ const onRemoveRootCollection = async () => { } const addRequest = (requestPathIndex: string) => { - editingCollIndexPath.value = requestPathIndex + editingCollectionIndexPath.value = requestPathIndex displayModalAddRequest(true) } const onAddRequest = async (requestName: string) => { - const parentCollIndexPath = editingCollIndexPath.value + const parentCollectionIndexPath = editingCollectionIndexPath.value - const collHandleResult = await workspaceService.getCollectionHandle( + const collectionHandleResult = await workspaceService.getCollectionHandle( props.workspaceHandle, - parentCollIndexPath + parentCollectionIndexPath ) - if (E.isLeft(collHandleResult)) { + if (E.isLeft(collectionHandleResult)) { // INVALID_WORKSPACE_HANDLE return } - const collHandle = collHandleResult.right + const collectionHandle = collectionHandleResult.right - if (collHandle.value.type === "invalid") { + if (collectionHandle.value.type === "invalid") { // WORKSPACE_INVALIDATED | INVALID_COLLECTION_HANDLE return } const result = await workspaceService.createRESTRequest( - collHandle, + collectionHandle, requestName, true ) @@ -355,34 +357,34 @@ const onAddRequest = async (requestName: string) => { displayModalAddRequest(false) } -const addChildCollection = (parentCollIndexPath: string) => { - editingCollIndexPath.value = parentCollIndexPath +const addChildCollection = (parentCollectionIndexPath: string) => { + editingCollectionIndexPath.value = parentCollectionIndexPath displayModalAddChildColl(true) } -const onAddChildCollection = async (childCollName: string) => { - const parentCollIndexPath = editingCollIndexPath.value +const onAddChildCollection = async (childCollectionName: string) => { + const parentCollectionIndexPath = editingCollectionIndexPath.value - const collHandleResult = await workspaceService.getCollectionHandle( + const collectionHandleResult = await workspaceService.getCollectionHandle( props.workspaceHandle, - parentCollIndexPath + parentCollectionIndexPath ) - if (E.isLeft(collHandleResult)) { + if (E.isLeft(collectionHandleResult)) { // INVALID_WORKSPACE_HANDLE return } - const collHandle = collHandleResult.right + const collectionHandle = collectionHandleResult.right - if (collHandle.value.type === "invalid") { + if (collectionHandle.value.type === "invalid") { // WORKSPACE_INVALIDATED | INVALID_COLLECTION_HANDLE return } const result = await workspaceService.createRESTChildCollection( - collHandle, - childCollName + collectionHandle, + childCollectionName ) if (E.isLeft(result)) { @@ -399,40 +401,48 @@ const onAddChildCollection = async (childCollName: string) => { } const editRootCollection = (payload: { - collIndexPath: string + collectionIndexPath: string collectionName: string }) => { - const { collIndexPath, collectionName } = payload + const { collectionIndexPath, collectionName } = payload - editingCollIndexPath.value = collIndexPath - editingRootCollName.value = collectionName + editingCollectionIndexPath.value = collectionIndexPath + editingRootCollectionName.value = collectionName displayModalEditCollection(true) } const onEditRootCollection = async (newCollectionName: string) => { - const collID = editingCollIndexPath.value + const collectionIndexPath = editingCollectionIndexPath.value - const collHandleResult = await workspaceService.getCollectionHandle( + const collectionHandleResult = await workspaceService.getCollectionHandle( props.workspaceHandle, - collID + collectionIndexPath ) - if (E.isLeft(collHandleResult)) { + if (E.isLeft(collectionHandleResult)) { // INVALID_WORKSPACE_HANDLE return } - const collHandle = collHandleResult.right + const collectionHandle = collectionHandleResult.right - if (collHandle.value.type === "invalid") { + if (collectionHandle.value.type === "invalid") { // WORKSPACE_INVALIDATED | INVALID_COLLECTION_HANDLE return } - const result = await workspaceService.editRESTRootCollection( - collHandle, - newCollectionName + // We're sure that the collection exists in the given `collectionIndexPath` as there's a validation happening in `getCollectionHandle` above + const updatedCollection = navigateToFolderWithIndexPath( + restCollectionStore.value.state, + collectionIndexPath.split("/").map((id) => parseInt(id)) + ) as HoppCollection + + updatedCollection.name = newCollectionName + + const result = await workspaceService.editRESTCollection( + collectionHandle, + updatedCollection ) if (E.isLeft(result)) { @@ -450,40 +460,48 @@ const onEditRootCollection = async (newCollectionName: string) => { } const editChildCollection = (payload: { - collIndexPath: string + collectionIndexPath: string collectionName: string }) => { - const { collIndexPath, collectionName } = payload + const { collectionIndexPath, collectionName } = payload - editingChildCollIndexPath.value = collIndexPath - editingChildCollName.value = collectionName + editingChildCollectionIndexPath.value = collectionIndexPath + editingChildCollectionName.value = collectionName displayModalEditChildCollection(true) } const onEditChildCollection = async (newCollectionName: string) => { - const collID = editingChildCollIndexPath.value + const collectionIndexPath = editingChildCollectionIndexPath.value - const collHandleResult = await workspaceService.getCollectionHandle( + const collectionHandleResult = await workspaceService.getCollectionHandle( props.workspaceHandle, - collID + collectionIndexPath ) - if (E.isLeft(collHandleResult)) { + if (E.isLeft(collectionHandleResult)) { // INVALID_WORKSPACE_HANDLE return } - const collHandle = collHandleResult.right + const collectionHandle = collectionHandleResult.right - if (collHandle.value.type === "invalid") { + if (collectionHandle.value.type === "invalid") { // WORKSPACE_INVALIDATED | INVALID_COLLECTION_HANDLE return } - const result = await workspaceService.editRESTChildCollection( - collHandle, - newCollectionName + // We're sure that the collection exists in the given `collectionIndexPath` as there's a validation happening in `getCollectionHandle` above + const updatedCollection = navigateToFolderWithIndexPath( + restCollectionStore.value.state, + collectionIndexPath.split("/").map((id) => parseInt(id)) + ) as HoppCollection + + updatedCollection.name = newCollectionName + + const result = await workspaceService.editRESTCollection( + collectionHandle, + updatedCollection ) if (E.isLeft(result)) { @@ -500,35 +518,37 @@ const onEditChildCollection = async (newCollectionName: string) => { toast.success(t("collection.renamed")) } -const removeChildCollection = (parentCollIndexPath: string) => { - editingCollIndexPath.value = parentCollIndexPath +const removeChildCollection = (parentCollectionIndexPath: string) => { + editingCollectionIndexPath.value = parentCollectionIndexPath confirmModalTitle.value = `${t("confirm.remove_folder")}` displayConfirmModal(true) } const onRemoveChildCollection = async () => { - const parentCollIndexPath = editingCollIndexPath.value + const parentCollectionIndexPath = editingCollectionIndexPath.value - const parentCollHandleResult = await workspaceService.getCollectionHandle( - props.workspaceHandle, - parentCollIndexPath - ) + const parentCollectionHandleResult = + await workspaceService.getCollectionHandle( + props.workspaceHandle, + parentCollectionIndexPath + ) - if (E.isLeft(parentCollHandleResult)) { + if (E.isLeft(parentCollectionHandleResult)) { // INVALID_WORKSPACE_HANDLE return } - const parentCollHandle = parentCollHandleResult.right + const parentCollectionHandle = parentCollectionHandleResult.right - if (parentCollHandle.value.type === "invalid") { + if (parentCollectionHandle.value.type === "invalid") { // WORKSPACE_INVALIDATED | INVALID_COLLECTION_HANDLE return } - const result = - await workspaceService.removeRESTChildCollection(parentCollHandle) + const result = await workspaceService.removeRESTChildCollection( + parentCollectionHandle + ) if (E.isLeft(result)) { // INVALID_COLLECTION_HANDLE @@ -545,9 +565,9 @@ const onRemoveChildCollection = async () => { } const removeRequest = (requestIndexPath: string) => { - const collIndexPath = requestIndexPath.split("/").slice(0, -1).join("/") + const collectionIndexPath = requestIndexPath.split("/").slice(0, -1).join("/") - editingCollIndexPath.value = collIndexPath + editingCollectionIndexPath.value = collectionIndexPath editingRequestIndexPath.value = requestIndexPath confirmModalTitle.value = `${t("confirm.remove_request")}` @@ -591,7 +611,7 @@ const onRemoveRequest = async () => { } const selectRequest = async (requestIndexPath: string) => { - const collIndexPath = requestIndexPath.split("/").slice(0, -1).join("/") + const collectionIndexPath = requestIndexPath.split("/").slice(0, -1).join("/") const requestHandleResult = await workspaceService.getRequestHandle( props.workspaceHandle, @@ -617,13 +637,13 @@ const selectRequest = async (requestIndexPath: string) => { let possibleTab = null const { auth, headers } = cascadeParentCollectionForHeaderAuth( - collIndexPath, + collectionIndexPath, "rest" ) possibleTab = tabs.getTabRefWithSaveContext({ originLocation: "user-collection", requestIndex, - folderPath: collIndexPath, + folderPath: collectionIndexPath, }) if (possibleTab) { tabs.setActiveTab(possibleTab.value.id) @@ -634,7 +654,7 @@ const selectRequest = async (requestIndexPath: string) => { isDirty: false, saveContext: { originLocation: "user-collection", - folderPath: collIndexPath, + folderPath: collectionIndexPath, requestIndex, }, inheritedProperties: { @@ -646,7 +666,7 @@ const selectRequest = async (requestIndexPath: string) => { } const duplicateRequest = async (requestIndexPath: string) => { - const collPath = requestIndexPath.split("/").slice(0, -1).join("/") + const collectionIndexPath = requestIndexPath.split("/").slice(0, -1).join("/") const requestHandleResult = await workspaceService.getRequestHandle( props.workspaceHandle, @@ -672,7 +692,7 @@ const duplicateRequest = async (requestIndexPath: string) => { name: `${request.name} - ${t("action.duplicate")}`, } - saveRESTRequestAs(collPath, newRequest) + saveRESTRequestAs(collectionIndexPath, newRequest) toast.success(t("request.duplicated")) } @@ -683,9 +703,9 @@ const editRequest = (payload: { }) => { const { requestIndexPath, requestName } = payload - const collPath = requestIndexPath.split("/").slice(0, -1).join("/") + const collectionIndexPath = requestIndexPath.split("/").slice(0, -1).join("/") - editingCollIndexPath.value = collPath + editingCollectionIndexPath.value = collectionIndexPath editingRequestIndexPath.value = requestIndexPath editingRequestName.value = requestName @@ -737,8 +757,8 @@ const onEditRequest = async (newReqName: string) => { toast.success(t("request.renamed")) } -const editCollectionProperties = async (collIndexPath: string) => { - const parentIndex = collIndexPath.split("/").slice(0, -1).join("/") // remove last folder to get parent folder +const editCollectionProperties = async (collectionIndexPath: string) => { + const parentIndex = collectionIndexPath.split("/").slice(0, -1).join("/") // remove last folder to get parent folder let inheritedProperties = { auth: { @@ -770,19 +790,19 @@ const editCollectionProperties = async (collIndexPath: string) => { } } - const collHandleResult = await workspaceService.getCollectionHandle( + const collectionHandleResult = await workspaceService.getCollectionHandle( props.workspaceHandle, - collIndexPath + collectionIndexPath ) - if (E.isLeft(collHandleResult)) { + if (E.isLeft(collectionHandleResult)) { // INVALID_WORKSPACE_HANDLE return } - const collHandle = collHandleResult.right + const collectionHandle = collectionHandleResult.right - if (collHandle.value.type === "invalid") { + if (collectionHandle.value.type === "invalid") { // WORKSPACE_INVALIDATED | INVALID_COLLECTION_HANDLE return } @@ -797,13 +817,13 @@ const editCollectionProperties = async (collIndexPath: string) => { const collection = navigateToFolderWithIndexPath( restCollectionState.value.state, - collIndexPath.split("/").map((i) => parseInt(i)) + collectionIndexPath.split("/").map((id) => parseInt(id)) ) editingProperties.value = { collection, - isRootCollection: isAlreadyInRoot(collIndexPath), - path: collIndexPath, + isRootCollection: isAlreadyInRoot(collectionIndexPath), + path: collectionIndexPath, inheritedProperties, } @@ -813,30 +833,42 @@ const editCollectionProperties = async (collIndexPath: string) => { const setCollectionProperties = async (updatedCollectionProps: { auth: HoppRESTAuth headers: HoppCollection["headers"] - collIndexPath: string + collectionIndexPath: string }) => { - const { collIndexPath, auth, headers } = updatedCollectionProps + const { collectionIndexPath, auth, headers } = updatedCollectionProps - const collHandleResult = await workspaceService.getCollectionHandle( + const collectionHandleResult = await workspaceService.getCollectionHandle( props.workspaceHandle, - collIndexPath + collectionIndexPath ) - if (E.isLeft(collHandleResult)) { + if (E.isLeft(collectionHandleResult)) { // INVALID_WORKSPACE_HANDLE return } - const collHandle = collHandleResult.right + const collectionHandle = collectionHandleResult.right - if (collHandle.value.type === "invalid") { + if (collectionHandle.value.type === "invalid") { // WORKSPACE_INVALIDATED | INVALID_COLLECTION_HANDLE return } - const result = await workspaceService.editRESTCollectionProperties( - collHandle, - { auth, headers } + // We're sure that the collection exists in the given `collectionIndexPath` as there's a validation happening in `getCollectionHandle` above + const collection = navigateToFolderWithIndexPath( + restCollectionStore.value.state, + collectionIndexPath.split("/").map((id) => parseInt(id)) + ) as HoppCollection + + const updatedCollection = { + ...collection, + auth, + headers, + } + + const result = await workspaceService.editRESTCollection( + collectionHandle, + updatedCollection ) if (E.isLeft(result)) { @@ -849,6 +881,20 @@ const setCollectionProperties = async (updatedCollectionProps: { return } + const { auth: cascadedAuth, headers: cascadedHeaders } = + cascadeParentCollectionForHeaderAuth(collectionIndexPath, "rest") + + nextTick(() => { + updateInheritedPropertiesForAffectedRequests( + collectionIndexPath, + { + auth: cascadedAuth, + headers: cascadedHeaders, + }, + "rest" + ) + }) + toast.success(t("collection.properties_updated")) displayModalEditProperties(false) @@ -871,7 +917,7 @@ const resolveConfirmModal = (title: string | null) => { } const resetSelectedData = () => { - editingCollIndexPath.value = "" + editingCollectionIndexPath.value = "" } /** diff --git a/packages/hoppscotch-common/src/services/new-workspace/index.ts b/packages/hoppscotch-common/src/services/new-workspace/index.ts index 5258f902f..87170cd64 100644 --- a/packages/hoppscotch-common/src/services/new-workspace/index.ts +++ b/packages/hoppscotch-common/src/services/new-workspace/index.ts @@ -8,12 +8,12 @@ import { shallowRef, watch, } from "vue" -import { UpdatedCollectionProperties, WorkspaceProvider } from "./provider" +import { WorkspaceProvider } from "./provider" import { HandleRef } from "./handle" import * as E from "fp-ts/Either" import { Workspace, WorkspaceCollection, WorkspaceRequest } from "./workspace" import { RESTCollectionChildrenView, RootRESTCollectionView } from "./view" -import { HoppRESTRequest } from "@hoppscotch/data" +import { HoppCollection, HoppRESTRequest } from "@hoppscotch/data" export type WorkspaceError = | { type: "SERVICE_ERROR"; error: ServiceErr } @@ -202,7 +202,7 @@ export class NewWorkspaceService extends Service { } public async createRESTChildCollection( - parentCollHandle: HandleRef, + parentCollectionHandle: HandleRef, collectionName: string ): Promise< E.Either< @@ -210,12 +210,12 @@ export class NewWorkspaceService extends Service { HandleRef > > { - if (parentCollHandle.value.type === "invalid") { + if (parentCollectionHandle.value.type === "invalid") { return E.left({ type: "SERVICE_ERROR", error: "INVALID_HANDLE" }) } const provider = this.registeredProviders.get( - parentCollHandle.value.data.providerID + parentCollectionHandle.value.data.providerID ) if (!provider) { @@ -223,7 +223,7 @@ export class NewWorkspaceService extends Service { } const result = await provider.createRESTChildCollection( - parentCollHandle, + parentCollectionHandle, collectionName ) @@ -234,96 +234,30 @@ export class NewWorkspaceService extends Service { return E.right(result.right) } - public async editRESTRootCollection( - collHandle: HandleRef, - newCollectionName: string + public async editRESTCollection( + collectionHandle: HandleRef, + updatedCollection: HoppCollection ): Promise< E.Either< WorkspaceError<"INVALID_HANDLE" | "INVALID_PROVIDER">, HandleRef > > { - if (collHandle.value.type === "invalid") { + if (collectionHandle.value.type === "invalid") { return E.left({ type: "SERVICE_ERROR", error: "INVALID_HANDLE" }) } const provider = this.registeredProviders.get( - collHandle.value.data.providerID + collectionHandle.value.data.providerID ) if (!provider) { return E.left({ type: "SERVICE_ERROR", error: "INVALID_PROVIDER" }) } - const result = await provider.editRESTRootCollection( - collHandle, - newCollectionName - ) - - if (E.isLeft(result)) { - return E.left({ type: "PROVIDER_ERROR", error: result.left }) - } - - return E.right(result.right) - } - - public async editRESTChildCollection( - collHandle: HandleRef, - newCollectionName: string - ): Promise< - E.Either< - WorkspaceError<"INVALID_HANDLE" | "INVALID_PROVIDER">, - HandleRef - > - > { - if (collHandle.value.type === "invalid") { - return E.left({ type: "SERVICE_ERROR", error: "INVALID_HANDLE" }) - } - - const provider = this.registeredProviders.get( - collHandle.value.data.providerID - ) - - if (!provider) { - return E.left({ type: "SERVICE_ERROR", error: "INVALID_PROVIDER" }) - } - - const result = await provider.editRESTChildCollection( - collHandle, - newCollectionName - ) - - if (E.isLeft(result)) { - return E.left({ type: "PROVIDER_ERROR", error: result.left }) - } - - return E.right(result.right) - } - - public async editRESTCollectionProperties( - collHandle: HandleRef, - updatedCollProps: UpdatedCollectionProperties - ): Promise< - E.Either< - WorkspaceError<"INVALID_HANDLE" | "INVALID_PROVIDER">, - HandleRef - > - > { - if (collHandle.value.type === "invalid") { - return E.left({ type: "SERVICE_ERROR", error: "INVALID_HANDLE" }) - } - - const provider = this.registeredProviders.get( - collHandle.value.data.providerID - ) - - if (!provider) { - return E.left({ type: "SERVICE_ERROR", error: "INVALID_PROVIDER" }) - } - - const result = await provider.editRESTCollectionProperties( - collHandle, - updatedCollProps + const result = await provider.editRESTCollection( + collectionHandle, + updatedCollection ) if (E.isLeft(result)) { @@ -334,26 +268,26 @@ export class NewWorkspaceService extends Service { } public async removeRESTRootCollection( - collHandle: HandleRef + collectionHandle: HandleRef ): Promise< E.Either< WorkspaceError<"INVALID_HANDLE" | "INVALID_PROVIDER">, HandleRef > > { - if (collHandle.value.type === "invalid") { + if (collectionHandle.value.type === "invalid") { return E.left({ type: "SERVICE_ERROR", error: "INVALID_HANDLE" }) } const provider = this.registeredProviders.get( - collHandle.value.data.providerID + collectionHandle.value.data.providerID ) if (!provider) { return E.left({ type: "SERVICE_ERROR", error: "INVALID_PROVIDER" }) } - const result = await provider.removeRESTRootCollection(collHandle) + const result = await provider.removeRESTRootCollection(collectionHandle) if (E.isLeft(result)) { return E.left({ type: "PROVIDER_ERROR", error: result.left }) @@ -363,26 +297,28 @@ export class NewWorkspaceService extends Service { } public async removeRESTChildCollection( - parentCollHandle: HandleRef + parentCollectionHandle: HandleRef ): Promise< E.Either< WorkspaceError<"INVALID_HANDLE" | "INVALID_PROVIDER">, HandleRef > > { - if (parentCollHandle.value.type === "invalid") { + if (parentCollectionHandle.value.type === "invalid") { return E.left({ type: "SERVICE_ERROR", error: "INVALID_HANDLE" }) } const provider = this.registeredProviders.get( - parentCollHandle.value.data.providerID + parentCollectionHandle.value.data.providerID ) if (!provider) { return E.left({ type: "SERVICE_ERROR", error: "INVALID_PROVIDER" }) } - const result = await provider.removeRESTChildCollection(parentCollHandle) + const result = await provider.removeRESTChildCollection( + parentCollectionHandle + ) if (E.isLeft(result)) { return E.left({ type: "PROVIDER_ERROR", error: result.left }) @@ -392,7 +328,7 @@ export class NewWorkspaceService extends Service { } public async createRESTRequest( - parentCollHandle: HandleRef, + parentCollectionHandle: HandleRef, requestName: string, openInNewTab: boolean ): Promise< @@ -401,12 +337,12 @@ export class NewWorkspaceService extends Service { HandleRef > > { - if (parentCollHandle.value.type === "invalid") { + if (parentCollectionHandle.value.type === "invalid") { return E.left({ type: "SERVICE_ERROR", error: "INVALID_HANDLE" }) } const provider = this.registeredProviders.get( - parentCollHandle.value.data.providerID + parentCollectionHandle.value.data.providerID ) if (!provider) { @@ -414,7 +350,7 @@ export class NewWorkspaceService extends Service { } const result = await provider.createRESTRequest( - parentCollHandle, + parentCollectionHandle, requestName, openInNewTab ) diff --git a/packages/hoppscotch-common/src/services/new-workspace/provider.ts b/packages/hoppscotch-common/src/services/new-workspace/provider.ts index 635df7148..806e385d5 100644 --- a/packages/hoppscotch-common/src/services/new-workspace/provider.ts +++ b/packages/hoppscotch-common/src/services/new-workspace/provider.ts @@ -8,16 +8,7 @@ import { WorkspaceRequest, } from "./workspace" import { RESTCollectionChildrenView, RootRESTCollectionView } from "./view" -import { - HoppRESTAuth, - HoppRESTHeaders, - HoppRESTRequest, -} from "@hoppscotch/data" - -export type UpdatedCollectionProperties = { - auth: HoppRESTAuth - headers: HoppRESTHeaders -} +import { HoppCollection, HoppRESTRequest } from "@hoppscotch/data" export interface WorkspaceProvider { providerID: string @@ -51,37 +42,29 @@ export interface WorkspaceProvider { collectionName: string ): Promise>> createRESTChildCollection( - parentCollHandle: HandleRef, + parentCollectionHandle: HandleRef, collectionName: string ): Promise>> - editRESTRootCollection( - collHandle: HandleRef, - newCollectionName: string - ): Promise>> - editRESTChildCollection( - parentCollHandle: HandleRef, - newCollectionName: string - ): Promise>> - editRESTCollectionProperties( - parentCollHandle: HandleRef, - updatedCollProps: UpdatedCollectionProperties + editRESTCollection( + collectionHandle: HandleRef, + updatedCollection: HoppCollection ): Promise>> removeRESTRootCollection( - collHandle: HandleRef + collectionHandle: HandleRef ): Promise>> removeRESTChildCollection( - parentCollHandle: HandleRef + parentCollectionHandle: HandleRef ): Promise>> createRESTRequest( - parentCollHandle: HandleRef, + parentCollectionHandle: HandleRef, requestName: string, openInNewTab: boolean ): Promise>> - removeRESTRequest( - requestHandle: HandleRef - ): Promise>> updateRESTRequest( requestHandle: HandleRef, updatedRequest: HoppRESTRequest ): Promise>> + removeRESTRequest( + requestHandle: HandleRef + ): Promise>> } diff --git a/packages/hoppscotch-common/src/services/new-workspace/providers/personal.workspace.ts b/packages/hoppscotch-common/src/services/new-workspace/providers/personal.workspace.ts index 0118c2bdd..720400583 100644 --- a/packages/hoppscotch-common/src/services/new-workspace/providers/personal.workspace.ts +++ b/packages/hoppscotch-common/src/services/new-workspace/providers/personal.workspace.ts @@ -1,7 +1,7 @@ import { HoppCollection, makeCollection } from "@hoppscotch/data" import { Service } from "dioc" import * as E from "fp-ts/Either" -import { Ref, computed, markRaw, nextTick, ref, shallowRef } from "vue" +import { Ref, computed, markRaw, ref, shallowRef } from "vue" import PersonalWorkspaceSelector from "~/components/workspace/PersonalWorkspaceSelector.vue" import { useStreamStatic } from "~/composables/stream" @@ -23,10 +23,7 @@ import { import { platform } from "~/platform" import { HandleRef } from "~/services/new-workspace/handle" -import { - UpdatedCollectionProperties, - WorkspaceProvider, -} from "~/services/new-workspace/provider" +import { WorkspaceProvider } from "~/services/new-workspace/provider" import { RESTCollectionChildrenView, RESTCollectionViewItem, @@ -52,7 +49,6 @@ import path from "path" import { resolveSaveContextOnCollectionReorder, getFoldersByPath, - updateInheritedPropertiesForAffectedRequests, } from "~/helpers/collection/collection" export class PersonalWorkspaceProviderService @@ -209,9 +205,9 @@ export class PersonalWorkspaceProviderService ) } - public editRESTRootCollection( + public editRESTCollection( collHandle: HandleRef, - newCollectionName: string + updatedCollection: HoppCollection ): Promise>> { if ( collHandle.value.type !== "ok" || @@ -250,129 +246,6 @@ export class PersonalWorkspaceProviderService } } - const updatedCollection = { - ...collection, - name: newCollectionName, - } - - const collectionIndex = parseInt(collectionID) - editRESTCollection(collectionIndex, updatedCollection) - - return { - type: "ok", - data: true, - } - }) - ) - ) - } - - public editRESTChildCollection( - collHandle: HandleRef, - newCollectionName: string - ): Promise>> { - if ( - collHandle.value.type !== "ok" || - collHandle.value.data.providerID !== this.providerID || - collHandle.value.data.workspaceID !== "personal" - ) { - return Promise.resolve(E.left("INVALID_WORKSPACE_HANDLE" as const)) - } - - return Promise.resolve( - E.right( - computed(() => { - if ( - collHandle.value.type !== "ok" || - collHandle.value.data.providerID !== this.providerID || - collHandle.value.data.workspaceID !== "personal" - ) { - return { - type: "invalid" as const, - reason: "WORKSPACE_INVALIDATED" as const, - } - } - - const { collectionID } = collHandle.value.data - - const collection: HoppCollection | null = - navigateToFolderWithIndexPath( - this.restCollectionState.value.state, - collectionID.split("/").map((id) => parseInt(id)) - ) - - if (!collection) { - return { - type: "invalid" as const, - reason: "COLLECTION_NOT_FOUND" as const, - } - } - - const updatedCollection = { - ...collection, - name: newCollectionName, - } - - editRESTFolder(collectionID, updatedCollection) - - return { - type: "ok", - data: true, - } - }) - ) - ) - } - - public editRESTCollectionProperties( - collHandle: HandleRef, - updatedCollProps: UpdatedCollectionProperties - ): Promise>> { - if ( - collHandle.value.type !== "ok" || - collHandle.value.data.providerID !== this.providerID || - collHandle.value.data.workspaceID !== "personal" - ) { - return Promise.resolve(E.left("INVALID_WORKSPACE_HANDLE" as const)) - } - - return Promise.resolve( - E.right( - computed(() => { - if ( - collHandle.value.type !== "ok" || - collHandle.value.data.providerID !== this.providerID || - collHandle.value.data.workspaceID !== "personal" - ) { - return { - type: "invalid" as const, - reason: "WORKSPACE_INVALIDATED" as const, - } - } - - const { collectionID } = collHandle.value.data - - const { auth, headers } = updatedCollProps - - const collection: HoppCollection | null = - navigateToFolderWithIndexPath( - this.restCollectionState.value.state, - collectionID.split("/").map((id) => parseInt(id)) - ) - - if (!collection) { - return { - type: "invalid" as const, - reason: "COLLECTION_NOT_FOUND" as const, - } - } - - const updatedCollection = { - ...collection, - auth, - headers, - } as HoppCollection - const isRootCollection = collectionID.split("/").length === 1 if (isRootCollection) { @@ -381,20 +254,6 @@ export class PersonalWorkspaceProviderService editRESTFolder(collectionID, updatedCollection) } - const { auth: cascadedAuth, headers: cascadedHeaders } = - cascadeParentCollectionForHeaderAuth(collectionID, "rest") - - nextTick(() => { - updateInheritedPropertiesForAffectedRequests( - collectionID, - { - auth: cascadedAuth, - headers: cascadedHeaders, - }, - "rest" - ) - }) - return { type: "ok", data: true,