URL Path Parameters #834

This commit is contained in:
Samir L. Boulema
2020-05-02 19:34:16 +02:00
parent 44cff354f2
commit 25f014ef3b
3 changed files with 51 additions and 10 deletions

View File

@@ -0,0 +1,17 @@
export function hasPathParams(params) {
return params.some((p) => p.type === "path")
}
export function addPathParamsToVariables(params, variables) {
params
.filter(({ key }) => !!key)
.filter(({ type }) => type === "path")
.forEach(p => variables[p.key] = p.value)
return variables;
}
export function getQueryParams(params) {
return params
.filter(({ key }) => !!key)
.filter(({ type }) => type != "path")
}

View File

@@ -848,6 +848,22 @@
" "
/> />
</li> </li>
<li>
<span class="select-wrapper">
<select
:name="'type' + index"
@change="
$store.commit('setTypeParams', {
index,
value: $event.target.value,
})
"
>
<option value="query" :selected="param.type === 'query'">{{ $t("query") }}</option>
<option value="path" :selected="param.type === 'path'">{{ $t("path") }}</option>
</select>
</span>
</li>
<div> <div>
<li> <li>
<button <button
@@ -1305,6 +1321,7 @@ import { tokenRequest, oauthRedirect } from "../assets/js/oauth"
import { sendNetworkRequest } from "../functions/network" import { sendNetworkRequest } from "../functions/network"
import { fb } from "../functions/fb" import { fb } from "../functions/fb"
import { getEditorLangForMimeType } from "~/functions/editorutils" import { getEditorLangForMimeType } from "~/functions/editorutils"
import { hasPathParams, addPathParamsToVariables, getQueryParams } from "../functions/requestParams.js"
const statusCategories = [ const statusCategories = [
{ {
name: "informational", name: "informational",
@@ -1492,8 +1509,7 @@ export default {
return return
} }
let path = this.path let path = this.path
let queryString = newValue let queryString = getQueryParams(newValue)
.filter(({ key }) => !!key)
.map(({ key, value }) => `${key}=${value}`) .map(({ key, value }) => `${key}=${value}`)
.join("&") .join("&")
queryString = queryString === "" ? "" : `?${queryString}` queryString = queryString === "" ? "" : `?${queryString}`
@@ -1503,6 +1519,7 @@ export default {
path = path + queryString path = path + queryString
} }
this.path = path this.path = path
this.setRouteQueryState()
}, },
deep: true, deep: true,
}, },
@@ -1573,9 +1590,11 @@ export default {
set(value) { set(value) {
this.$store.commit("setState", { value, attribute: "uri" }) this.$store.commit("setState", { value, attribute: "uri" })
let url = value let url = value
if (this.preRequestScript && this.showPreRequestScript) {
const environmentVariables = getEnvironmentVariablesFromScript(this.preRequestScript) if ((this.preRequestScript && this.showPreRequestScript) || hasPathParams(this.params)) {
url = parseTemplateString(value, environmentVariables) let environmentVariables = getEnvironmentVariablesFromScript(this.preRequestScript)
environmentVariables = addPathParamsToVariables(this.params, environmentVariables)
url = parseTemplateString(url, environmentVariables)
} }
try { try {
url = new URL(url) url = new URL(url)
@@ -1882,8 +1901,7 @@ export default {
return result === "" ? "" : `${result}` return result === "" ? "" : `${result}`
}, },
queryString() { queryString() {
const result = this.params const result = getQueryParams(this.params)
.filter(({ key }) => !!key)
.map(({ key, value }) => `${key}=${encodeURIComponent(value)}`) .map(({ key, value }) => `${key}=${encodeURIComponent(value)}`)
.join("&") .join("&")
return result === "" ? "" : `?${result}` return result === "" ? "" : `?${result}`
@@ -2039,8 +2057,10 @@ export default {
data: requestBody, data: requestBody,
credentials: true, credentials: true,
} }
if (preRequestScript) {
const environmentVariables = getEnvironmentVariablesFromScript(preRequestScript) if (preRequestScript || hasPathParams(this.params)) {
let environmentVariables = getEnvironmentVariablesFromScript(preRequestScript)
environmentVariables = addPathParamsToVariables(this.params, environmentVariables)
requestOptions.url = parseTemplateString(requestOptions.url, environmentVariables) requestOptions.url = parseTemplateString(requestOptions.url, environmentVariables)
requestOptions.data = parseTemplateString(requestOptions.data, environmentVariables) requestOptions.data = parseTemplateString(requestOptions.data, environmentVariables)
for (let k in requestOptions.headers) { for (let k in requestOptions.headers) {
@@ -2261,7 +2281,7 @@ export default {
}) })
}, },
addRequestParam() { addRequestParam() {
this.$store.commit("addParams", { key: "", value: "" }) this.$store.commit("addParams", { key: "", value: "", type: "query" })
return false return false
}, },
removeRequestParam(index) { removeRequestParam(index) {

View File

@@ -61,6 +61,10 @@ export default {
request.params[index].value = value request.params[index].value = value
}, },
setTypeParams({ request }, { index, value }) {
request.params[index].type = value
},
addBodyParams({ request }, value) { addBodyParams({ request }, value) {
request.bodyParams.push(value) request.bodyParams.push(value)
}, },