Sync path and parameters.

This commit is contained in:
Hossein Nedaee
2019-09-17 03:24:11 +04:30
parent 945da8bf92
commit 164624786d

View File

@@ -59,7 +59,7 @@
</li> </li>
<li> <li>
<label for="path">Path</label> <label for="path">Path</label>
<input @keyup.enter="isValidURL ? sendRequest() : null" id="path" name="path" v-model="path"> <input @keyup.enter="isValidURL ? sendRequest() : null" id="path" name="path" v-model="path" @input="pathInputHandler">
</li> </li>
<div class="show-on-small-screen"> <div class="show-on-small-screen">
<li> <li>
@@ -444,6 +444,7 @@
body: '' body: ''
}, },
previewEnabled: false, previewEnabled: false,
paramsWatchEnabled: true,
/** /**
* These are content types that can be automatically * These are content types that can be automatically
@@ -493,6 +494,32 @@
responseText.innerText = this.response.body responseText.innerText = this.response.body
} }
} }
},
params: {
handler: function(newValue) {
if(!this.paramsWatchEnabled) {
this.paramsWatchEnabled = true;
return;
}
let path = this.path;
let queryString = newValue
.filter(({
key
}) => !!key)
.map(({
key,
value
}) => `${key}=${value}`).join('&')
queryString = queryString === '' ? '' : `?${queryString}`
if(path.indexOf('?') !== -1) {
path = path.slice(0, path.indexOf('?')) + queryString;
} else {
path = path + queryString
}
this.path = path;
},
deep: true
} }
}, },
computed: { computed: {
@@ -511,6 +538,15 @@
hasRequestBody() { hasRequestBody() {
return ['POST', 'PUT', 'PATCH'].includes(this.method); return ['POST', 'PUT', 'PATCH'].includes(this.method);
}, },
pathName() {
let result;
if(this.path.indexOf('?') !== -1) {
result = this.path.slice(0, this.path.indexOf('?'))
} else {
result = this.path;
}
return result;
},
rawRequestBody() { rawRequestBody() {
const { const {
bodyParams bodyParams
@@ -715,7 +751,7 @@
try { try {
const payload = await this.$axios({ const payload = await this.$axios({
method: this.method, method: this.method,
url: this.url + this.path + this.queryString, url: this.url + this.pathName + this.queryString,
auth, auth,
headers, headers,
data: requestBody ? requestBody.toString() : null data: requestBody ? requestBody.toString() : null
@@ -765,7 +801,38 @@
this.response.body = "See JavaScript console (F12) for details."; this.response.body = "See JavaScript console (F12) for details.";
} }
}, },
pathInputHandler(event) {
let newValue = event.target.value;
let path, start, end, queryString;
path = newValue;
start = path.indexOf('?');
end = path.indexOf('#') !== -1 ? path.indexOf('#') : path.length;
if(start !== -1) {
queryString = path.slice(start, end).length > 1 ? path.slice(start, end) : '';
} else {
queryString = ''
}
let params = [];
if(queryString) {
let paramsInString = newValue.split('?')[1];
params = paramsInString.split('&').filter(pair => !!pair).map(pair => {
pair = pair.replace(/#/g, '');
let key, value;
if(pair.indexOf('=') === -1) {
key = pair;
value = '';
} else {
let splited = pair.split('=');
[key, value] = [splited.shift(), splited.join('=')];
}
return {key, value}
})
}
this.paramsWatchEnabled = false;
this.params = params;
},
addRequestHeader() { addRequestHeader() {
this.headers.push({ this.headers.push({
key: '', key: '',