diff --git a/packages/hoppscotch-common/src/components/new-collections/rest/Request.vue b/packages/hoppscotch-common/src/components/new-collections/rest/Request.vue index 7e07cda57..4314f5157 100644 --- a/packages/hoppscotch-common/src/components/new-collections/rest/Request.vue +++ b/packages/hoppscotch-common/src/components/new-collections/rest/Request.vue @@ -104,7 +104,7 @@ :shortcut="['⌫']" @click=" () => { - emit('remove-request') + emit('remove-request', requestView.requestID) hide() } " @@ -145,7 +145,7 @@ const emit = defineEmits<{ requestName: string } ): void - (event: "remove-request"): void + (event: "remove-request", requestIndexPath: string): void (event: "select-request", requestIndexPath: string): void }>() 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 cc92c308b..218950504 100644 --- a/packages/hoppscotch-common/src/components/new-collections/rest/index.vue +++ b/packages/hoppscotch-common/src/components/new-collections/rest/index.vue @@ -49,7 +49,7 @@ :request-view="node.data.value" @duplicate-request="duplicateRequest" @edit-request="editRequest" - @remove-request="removeRequest(node.data.value.requestID)" + @remove-request="removeRequest" @select-request="selectRequest" />
@@ -142,13 +142,14 @@ import { cascadeParentCollectionForHeaderAuth, navigateToFolderWithIndexPath, restCollectionStore, + restCollections$, saveRESTRequestAs, } from "~/newstore/collections" import { cloneDeep } from "lodash-es" import { HoppCollection, HoppRESTAuth, HoppRESTRequest } from "@hoppscotch/data" import { TeamCollection } from "~/helpers/backend/graphql" import { HoppInheritedProperty } from "~/helpers/types/HoppInheritedProperties" -import { useStreamStatic } from "~/composables/stream" +import { useReadonlyStream } from "~/composables/stream" import { updateInheritedPropertiesForAffectedRequests } from "~/helpers/collection/collection" const t = useI18n() @@ -165,6 +166,8 @@ defineEmits<{ }>() const workspaceService = useService(NewWorkspaceService) +const restCollectionState = useReadonlyStream(restCollections$, []) + const treeAdapter = markRaw( new WorkspaceRESTCollectionTreeAdapter( props.workspaceHandle, @@ -249,9 +252,12 @@ const displayConfirmModal = (show: boolean) => { const addNewRootCollection = async (name: string) => { modalLoadingState.value = true + const newCollectionID = restCollectionState.value.length.toString() + const result = await workspaceService.createRESTRootCollection( props.workspaceHandle, - name + name, + newCollectionID ) if (E.isLeft(result)) { @@ -807,16 +813,8 @@ const editCollectionProperties = async (collectionIndexPath: string) => { return } - const restCollectionState = useStreamStatic( - restCollectionStore.subject$, - { state: [] }, - () => { - /* noop */ - } - )[0] - const collection = navigateToFolderWithIndexPath( - restCollectionState.value.state, + restCollectionState.value, collectionIndexPath.split("/").map((id) => parseInt(id)) ) diff --git a/packages/hoppscotch-common/src/services/new-workspace/index.ts b/packages/hoppscotch-common/src/services/new-workspace/index.ts index 87170cd64..02d30b440 100644 --- a/packages/hoppscotch-common/src/services/new-workspace/index.ts +++ b/packages/hoppscotch-common/src/services/new-workspace/index.ts @@ -170,7 +170,8 @@ export class NewWorkspaceService extends Service { public async createRESTRootCollection( workspaceHandle: HandleRef, - collectionName: string + collectionName: string, + newCollectionID: string ): Promise< E.Either< WorkspaceError<"INVALID_HANDLE" | "INVALID_PROVIDER">, @@ -191,7 +192,8 @@ export class NewWorkspaceService extends Service { const result = await provider.createRESTRootCollection( workspaceHandle, - collectionName + collectionName, + newCollectionID ) if (E.isLeft(result)) { @@ -334,7 +336,7 @@ export class NewWorkspaceService extends Service { ): Promise< E.Either< WorkspaceError<"INVALID_HANDLE" | "INVALID_PROVIDER">, - HandleRef + HandleRef > > { if (parentCollectionHandle.value.type === "invalid") { diff --git a/packages/hoppscotch-common/src/services/new-workspace/provider.ts b/packages/hoppscotch-common/src/services/new-workspace/provider.ts index 806e385d5..34970ffe9 100644 --- a/packages/hoppscotch-common/src/services/new-workspace/provider.ts +++ b/packages/hoppscotch-common/src/services/new-workspace/provider.ts @@ -39,7 +39,8 @@ export interface WorkspaceProvider { createRESTRootCollection( workspaceHandle: HandleRef, - collectionName: string + collectionName: string, + newCollectionID: string ): Promise>> createRESTChildCollection( parentCollectionHandle: HandleRef, @@ -59,7 +60,7 @@ export interface WorkspaceProvider { parentCollectionHandle: HandleRef, requestName: string, openInNewTab: boolean - ): Promise>> + ): Promise>> updateRESTRequest( requestHandle: HandleRef, updatedRequest: HoppRESTRequest 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 720400583..4cf503ed8 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 @@ -96,7 +96,8 @@ export class PersonalWorkspaceProviderService public createRESTRootCollection( workspaceHandle: HandleRef, - collectionName: string + collectionName: string, + newCollectionID: string ): Promise>> { if ( workspaceHandle.value.type !== "ok" || @@ -144,7 +145,7 @@ export class PersonalWorkspaceProviderService data: { providerID: this.providerID, workspaceID: workspaceHandle.value.data.workspaceID, - collectionID: "", // Compute this and supply + collectionID: newCollectionID, name: collectionName, }, } @@ -348,7 +349,7 @@ export class PersonalWorkspaceProviderService const folderToRemove = path ? navigateToFolderWithIndexPath( restCollectionStore.value.state, - collectionID.split("/").map((i) => parseInt(i)) + collectionID.split("/").map((id) => parseInt(id)) ) : undefined @@ -381,7 +382,7 @@ export class PersonalWorkspaceProviderService parentCollHandle: HandleRef, requestName: string, openInNewTab: boolean - ): Promise>> { + ): Promise>> { if ( parentCollHandle.value.type !== "ok" || parentCollHandle.value.data.providerID !== this.providerID || @@ -404,7 +405,7 @@ export class PersonalWorkspaceProviderService } } - const { collectionID, providerID, workspaceID, name } = + const { collectionID, providerID, workspaceID } = parentCollHandle.value.data const newRequest = { @@ -442,13 +443,16 @@ export class PersonalWorkspaceProviderService platform: "rest", }) + const requestID = `${collectionID}/${insertionIndex}` + return { type: "ok", data: { providerID, workspaceID, collectionID, - name, + requestID, + request: newRequest, }, } }) @@ -498,7 +502,7 @@ export class PersonalWorkspaceProviderService const requestToRemove = navigateToFolderWithIndexPath( restCollectionStore.value.state, - collectionID.split("/").map((i) => parseInt(i)) + collectionID.split("/").map((id) => parseInt(id)) )?.requests[requestIndex] removeRESTRequest(collectionID, requestIndex, requestToRemove?.id)