feat: save request context
This commit is contained in:
@@ -62,7 +62,11 @@ import {
|
|||||||
saveGraphqlRequestAs,
|
saveGraphqlRequestAs,
|
||||||
} from "~/newstore/collections"
|
} from "~/newstore/collections"
|
||||||
import { getGQLSession, useGQLRequestName } from "~/newstore/GQLSession"
|
import { getGQLSession, useGQLRequestName } from "~/newstore/GQLSession"
|
||||||
import { getRESTRequest, useRESTRequestName } from "~/newstore/RESTSession"
|
import {
|
||||||
|
getRESTRequest,
|
||||||
|
useRESTRequestName,
|
||||||
|
setRESTSaveContext,
|
||||||
|
} from "~/newstore/RESTSession"
|
||||||
|
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
props: {
|
props: {
|
||||||
@@ -142,10 +146,32 @@ export default defineComponent({
|
|||||||
this.picked.requestIndex,
|
this.picked.requestIndex,
|
||||||
requestUpdated
|
requestUpdated
|
||||||
)
|
)
|
||||||
|
setRESTSaveContext({
|
||||||
|
originLocation: "user-collection",
|
||||||
|
folderPath: this.picked.folderPath,
|
||||||
|
requestIndex: this.picked.requestIndex,
|
||||||
|
})
|
||||||
} else if (this.picked.pickedType === "my-folder") {
|
} else if (this.picked.pickedType === "my-folder") {
|
||||||
saveRESTRequestAs(this.picked.folderPath, requestUpdated)
|
const insertionIndex = saveRESTRequestAs(
|
||||||
|
this.picked.folderPath,
|
||||||
|
requestUpdated
|
||||||
|
)
|
||||||
|
setRESTSaveContext({
|
||||||
|
originLocation: "user-collection",
|
||||||
|
folderPath: this.picked.folderPath,
|
||||||
|
requestIndex: insertionIndex,
|
||||||
|
})
|
||||||
} else if (this.picked.pickedType === "my-collection") {
|
} else if (this.picked.pickedType === "my-collection") {
|
||||||
saveRESTRequestAs(`${this.picked.collectionIndex}`, requestUpdated)
|
debugger
|
||||||
|
const insertionIndex = saveRESTRequestAs(
|
||||||
|
`${this.picked.collectionIndex}`,
|
||||||
|
requestUpdated
|
||||||
|
)
|
||||||
|
setRESTSaveContext({
|
||||||
|
originLocation: "user-collection",
|
||||||
|
folderPath: `${this.picked.collectionIndex}`,
|
||||||
|
requestIndex: insertionIndex,
|
||||||
|
})
|
||||||
} else if (this.picked.pickedType === "teams-request") {
|
} else if (this.picked.pickedType === "teams-request") {
|
||||||
teamUtils.overwriteRequestTeams(
|
teamUtils.overwriteRequestTeams(
|
||||||
this.$apollo,
|
this.$apollo,
|
||||||
@@ -153,6 +179,10 @@ export default defineComponent({
|
|||||||
requestUpdated.name,
|
requestUpdated.name,
|
||||||
this.picked.requestID
|
this.picked.requestID
|
||||||
)
|
)
|
||||||
|
setRESTSaveContext({
|
||||||
|
originLocation: "teams-collection",
|
||||||
|
requestID: this.picked.requestID,
|
||||||
|
})
|
||||||
} else if (this.picked.pickedType === "teams-folder") {
|
} else if (this.picked.pickedType === "teams-folder") {
|
||||||
teamUtils.saveRequestAsTeams(
|
teamUtils.saveRequestAsTeams(
|
||||||
this.$apollo,
|
this.$apollo,
|
||||||
@@ -161,6 +191,10 @@ export default defineComponent({
|
|||||||
this.collectionsType.selectedTeam.id,
|
this.collectionsType.selectedTeam.id,
|
||||||
this.picked.folderID
|
this.picked.folderID
|
||||||
)
|
)
|
||||||
|
setRESTSaveContext({
|
||||||
|
originLocation: "teams-collection",
|
||||||
|
requestID: this.picked.requestID,
|
||||||
|
})
|
||||||
} else if (this.picked.pickedType === "teams-collection") {
|
} else if (this.picked.pickedType === "teams-collection") {
|
||||||
teamUtils.saveRequestAsTeams(
|
teamUtils.saveRequestAsTeams(
|
||||||
this.$apollo,
|
this.$apollo,
|
||||||
@@ -169,6 +203,10 @@ export default defineComponent({
|
|||||||
this.collectionsType.selectedTeam.id,
|
this.collectionsType.selectedTeam.id,
|
||||||
this.picked.collectionID
|
this.picked.collectionID
|
||||||
)
|
)
|
||||||
|
setRESTSaveContext({
|
||||||
|
originLocation: "teams-collection",
|
||||||
|
requestID: this.picked.requestID,
|
||||||
|
})
|
||||||
} else if (this.picked.pickedType === "gql-my-request") {
|
} else if (this.picked.pickedType === "gql-my-request") {
|
||||||
editGraphqlRequest(
|
editGraphqlRequest(
|
||||||
this.picked.folderPath,
|
this.picked.folderPath,
|
||||||
@@ -183,6 +221,7 @@ export default defineComponent({
|
|||||||
this.$toast.success("Requested added", {
|
this.$toast.success("Requested added", {
|
||||||
icon: "done",
|
icon: "done",
|
||||||
})
|
})
|
||||||
|
|
||||||
this.hideModal()
|
this.hideModal()
|
||||||
},
|
},
|
||||||
hideModal() {
|
hideModal() {
|
||||||
|
|||||||
@@ -160,7 +160,13 @@ export default {
|
|||||||
requestIndex: this.requestIndex,
|
requestIndex: this.requestIndex,
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
else setRESTRequest(translateToNewRequest(this.request))
|
else {
|
||||||
|
setRESTRequest(translateToNewRequest(this.request), {
|
||||||
|
originLocation: "user-collection",
|
||||||
|
folderPath: this.folderPath,
|
||||||
|
requestIndex: this.requestIndex,
|
||||||
|
})
|
||||||
|
}
|
||||||
},
|
},
|
||||||
dragStart({ dataTransfer }) {
|
dragStart({ dataTransfer }) {
|
||||||
this.dragging = !this.dragging
|
this.dragging = !this.dragging
|
||||||
|
|||||||
@@ -147,7 +147,11 @@ export default {
|
|||||||
requestID: this.requestIndex,
|
requestID: this.requestIndex,
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
else setRESTRequest(translateToNewRequest(this.request))
|
else
|
||||||
|
setRESTRequest(translateToNewRequest(this.request), {
|
||||||
|
originLocation: "team-collection",
|
||||||
|
requestIndex: this.requestIndex,
|
||||||
|
})
|
||||||
},
|
},
|
||||||
removeRequest() {
|
removeRequest() {
|
||||||
this.$emit("remove-request", {
|
this.$emit("remove-request", {
|
||||||
|
|||||||
@@ -219,7 +219,10 @@ import {
|
|||||||
updateRESTMethod,
|
updateRESTMethod,
|
||||||
resetRESTRequest,
|
resetRESTRequest,
|
||||||
useRESTRequestName,
|
useRESTRequestName,
|
||||||
|
getRESTSaveContext,
|
||||||
|
getRESTRequest,
|
||||||
} from "~/newstore/RESTSession"
|
} from "~/newstore/RESTSession"
|
||||||
|
import { editRESTRequest } from "~/newstore/collections"
|
||||||
import { getPlatformSpecialKey } from "~/helpers/platformutils"
|
import { getPlatformSpecialKey } from "~/helpers/platformutils"
|
||||||
import { runRESTRequest$ } from "~/helpers/RequestRunner"
|
import { runRESTRequest$ } from "~/helpers/RequestRunner"
|
||||||
import {
|
import {
|
||||||
@@ -230,6 +233,8 @@ import {
|
|||||||
import { defineActionHandler } from "~/helpers/actions"
|
import { defineActionHandler } from "~/helpers/actions"
|
||||||
import { copyToClipboard } from "~/helpers/utils/clipboard"
|
import { copyToClipboard } from "~/helpers/utils/clipboard"
|
||||||
import { useSetting } from "~/newstore/settings"
|
import { useSetting } from "~/newstore/settings"
|
||||||
|
import { saveRequestAsTeams } from "~/helpers/teams/utils"
|
||||||
|
import { apolloClient } from "~/helpers/apollo"
|
||||||
|
|
||||||
const methods = [
|
const methods = [
|
||||||
"GET",
|
"GET",
|
||||||
@@ -366,6 +371,32 @@ export default defineComponent({
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const saveRequest = () => {
|
||||||
|
const saveCtx = getRESTSaveContext()
|
||||||
|
if (!saveCtx) {
|
||||||
|
showSaveRequestModal.value = true
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if (saveCtx.originLocation === "user-collection") {
|
||||||
|
editRESTRequest(
|
||||||
|
saveCtx.folderPath,
|
||||||
|
saveCtx.requestIndex,
|
||||||
|
getRESTRequest()
|
||||||
|
)
|
||||||
|
} else if (saveCtx.originLocation === "team-collection") {
|
||||||
|
const req = getRESTRequest()
|
||||||
|
|
||||||
|
// TODO: handle error case (NOTE: saveRequestAsTeams is async)
|
||||||
|
saveRequestAsTeams(
|
||||||
|
apolloClient,
|
||||||
|
JSON.stringify(req),
|
||||||
|
req.name,
|
||||||
|
saveCtx.requestID
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
defineActionHandler("request.send-cancel", () => {
|
defineActionHandler("request.send-cancel", () => {
|
||||||
if (!loading.value) newSendRequest()
|
if (!loading.value) newSendRequest()
|
||||||
else cancelRequest()
|
else cancelRequest()
|
||||||
@@ -374,10 +405,7 @@ export default defineComponent({
|
|||||||
defineActionHandler("request.copy-link", copyRequest)
|
defineActionHandler("request.copy-link", copyRequest)
|
||||||
defineActionHandler("request.method.next", cycleDownMethod)
|
defineActionHandler("request.method.next", cycleDownMethod)
|
||||||
defineActionHandler("request.method.prev", cycleUpMethod)
|
defineActionHandler("request.method.prev", cycleUpMethod)
|
||||||
defineActionHandler(
|
defineActionHandler("request.save", saveRequest)
|
||||||
"request.save",
|
|
||||||
() => (showSaveRequestModal.value = true)
|
|
||||||
)
|
|
||||||
defineActionHandler("request.method.get", () => updateMethod("GET"))
|
defineActionHandler("request.method.get", () => updateMethod("GET"))
|
||||||
defineActionHandler("request.method.post", () => updateMethod("POST"))
|
defineActionHandler("request.method.post", () => updateMethod("POST"))
|
||||||
defineActionHandler("request.method.put", () => updateMethod("PUT"))
|
defineActionHandler("request.method.put", () => updateMethod("PUT"))
|
||||||
|
|||||||
31
helpers/types/HoppRequestSaveContext.ts
Normal file
31
helpers/types/HoppRequestSaveContext.ts
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
/**
|
||||||
|
* We use the save context to figure out
|
||||||
|
* how a loaded request is to be saved.
|
||||||
|
* These will be set when the request is loaded
|
||||||
|
* into the request session (RESTSession)
|
||||||
|
*/
|
||||||
|
export type HoppRequestSaveContext =
|
||||||
|
| {
|
||||||
|
/**
|
||||||
|
* The origin source of the request
|
||||||
|
*/
|
||||||
|
originLocation: "user-collection"
|
||||||
|
/**
|
||||||
|
* Path to the request folder
|
||||||
|
*/
|
||||||
|
folderPath: string
|
||||||
|
/**
|
||||||
|
* Index to the request
|
||||||
|
*/
|
||||||
|
requestIndex: number
|
||||||
|
}
|
||||||
|
| {
|
||||||
|
/**
|
||||||
|
* The origin source of the request
|
||||||
|
*/
|
||||||
|
originLocation: "team-collection"
|
||||||
|
/**
|
||||||
|
* ID of the request in the team
|
||||||
|
*/
|
||||||
|
requestID: string
|
||||||
|
}
|
||||||
@@ -14,11 +14,13 @@ import { useStream } from "~/helpers/utils/composables"
|
|||||||
import { HoppTestResult } from "~/helpers/types/HoppTestResult"
|
import { HoppTestResult } from "~/helpers/types/HoppTestResult"
|
||||||
import { HoppRESTAuth } from "~/helpers/types/HoppRESTAuth"
|
import { HoppRESTAuth } from "~/helpers/types/HoppRESTAuth"
|
||||||
import { ValidContentTypes } from "~/helpers/utils/contenttypes"
|
import { ValidContentTypes } from "~/helpers/utils/contenttypes"
|
||||||
|
import { HoppRequestSaveContext } from "~/helpers/types/HoppRequestSaveContext"
|
||||||
|
|
||||||
type RESTSession = {
|
type RESTSession = {
|
||||||
request: HoppRESTRequest
|
request: HoppRESTRequest
|
||||||
response: HoppRESTResponse | null
|
response: HoppRESTResponse | null
|
||||||
testResults: HoppTestResult | null
|
testResults: HoppTestResult | null
|
||||||
|
saveContext: HoppRequestSaveContext | null
|
||||||
}
|
}
|
||||||
|
|
||||||
const defaultRESTRequest: HoppRESTRequest = {
|
const defaultRESTRequest: HoppRESTRequest = {
|
||||||
@@ -45,6 +47,7 @@ const defaultRESTSession: RESTSession = {
|
|||||||
request: defaultRESTRequest,
|
request: defaultRESTRequest,
|
||||||
response: null,
|
response: null,
|
||||||
testResults: null,
|
testResults: null,
|
||||||
|
saveContext: null,
|
||||||
}
|
}
|
||||||
|
|
||||||
const dispatchers = defineDispatchers({
|
const dispatchers = defineDispatchers({
|
||||||
@@ -338,6 +341,14 @@ const dispatchers = defineDispatchers({
|
|||||||
testResults: newResults,
|
testResults: newResults,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
setSaveContext(
|
||||||
|
_,
|
||||||
|
{ newContext }: { newContext: HoppRequestSaveContext | null }
|
||||||
|
) {
|
||||||
|
return {
|
||||||
|
saveContext: newContext,
|
||||||
|
}
|
||||||
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
const restSessionStore = new DispatchingStore(defaultRESTSession, dispatchers)
|
const restSessionStore = new DispatchingStore(defaultRESTSession, dispatchers)
|
||||||
@@ -346,13 +357,31 @@ export function getRESTRequest() {
|
|||||||
return restSessionStore.subject$.value.request
|
return restSessionStore.subject$.value.request
|
||||||
}
|
}
|
||||||
|
|
||||||
export function setRESTRequest(req: HoppRESTRequest) {
|
export function setRESTRequest(
|
||||||
|
req: HoppRESTRequest,
|
||||||
|
saveContext?: HoppRequestSaveContext | null
|
||||||
|
) {
|
||||||
restSessionStore.dispatch({
|
restSessionStore.dispatch({
|
||||||
dispatcher: "setRequest",
|
dispatcher: "setRequest",
|
||||||
payload: {
|
payload: {
|
||||||
req,
|
req,
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
|
if (saveContext) setRESTSaveContext(saveContext)
|
||||||
|
}
|
||||||
|
|
||||||
|
export function setRESTSaveContext(saveContext: HoppRequestSaveContext | null) {
|
||||||
|
restSessionStore.dispatch({
|
||||||
|
dispatcher: "setSaveContext",
|
||||||
|
payload: {
|
||||||
|
newContext: saveContext,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getRESTSaveContext() {
|
||||||
|
return restSessionStore.value.saveContext
|
||||||
}
|
}
|
||||||
|
|
||||||
export function resetRESTRequest() {
|
export function resetRESTRequest() {
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import { pluck } from "rxjs/operators"
|
import { pluck } from "rxjs/operators"
|
||||||
import DispatchingStore, { defineDispatchers } from "./DispatchingStore"
|
import DispatchingStore, { defineDispatchers } from "./DispatchingStore"
|
||||||
|
import { getRESTSaveContext, setRESTSaveContext } from "./RESTSession"
|
||||||
|
|
||||||
interface Collection {
|
interface Collection {
|
||||||
name: string
|
name: string
|
||||||
@@ -255,6 +256,16 @@ const collectionDispatchers = defineDispatchers({
|
|||||||
|
|
||||||
targetLocation.requests.splice(requestIndex, 1)
|
targetLocation.requests.splice(requestIndex, 1)
|
||||||
|
|
||||||
|
// If the save context is set and is set to the same source, we invalidate it
|
||||||
|
const saveCtx = getRESTSaveContext()
|
||||||
|
if (
|
||||||
|
saveCtx?.originLocation === "user-collection" &&
|
||||||
|
saveCtx.folderPath === path &&
|
||||||
|
saveCtx.requestIndex === requestIndex
|
||||||
|
) {
|
||||||
|
setRESTSaveContext(null)
|
||||||
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
state: newState,
|
state: newState,
|
||||||
}
|
}
|
||||||
@@ -416,6 +427,15 @@ export function editRESTRequest(
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function saveRESTRequestAs(path: string, request: any) {
|
export function saveRESTRequestAs(path: string, request: any) {
|
||||||
|
// For calculating the insertion request index
|
||||||
|
debugger
|
||||||
|
const targetLocation = navigateToFolderWithIndexPath(
|
||||||
|
restCollectionStore.value.state,
|
||||||
|
path.split("/").map((x) => parseInt(x))
|
||||||
|
)
|
||||||
|
|
||||||
|
const insertionIndex = targetLocation!.requests.length
|
||||||
|
|
||||||
restCollectionStore.dispatch({
|
restCollectionStore.dispatch({
|
||||||
dispatcher: "saveRequestAs",
|
dispatcher: "saveRequestAs",
|
||||||
payload: {
|
payload: {
|
||||||
@@ -423,6 +443,8 @@ export function saveRESTRequestAs(path: string, request: any) {
|
|||||||
request,
|
request,
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
|
return insertionIndex
|
||||||
}
|
}
|
||||||
|
|
||||||
export function removeRESTRequest(path: string, requestIndex: number) {
|
export function removeRESTRequest(path: string, requestIndex: number) {
|
||||||
|
|||||||
Reference in New Issue
Block a user