# vue js query example
```
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.12"></script>
<div id="main-container">
<form>
<label for="collectionName">
Collection
<select v-model="selectedCollection">
<option v-for="collection in collections" v-bind:value="collection"> {{ collection.name }}</option>
</select>
</label>
<div v-if="!!selectedCollection" class="fieldsList">
<h3 class="fieldsTitle">
Fields
</h3>
<label class="field" v-for="field in selectedCollection.fields"> {{field.dataKey}}
<input type="checkbox" v-model="field.isChecked">
</label>
</div>
</form>
<p v-if="successed">success</p>
<!-- <code id="result-box"></code> -->
</div>
<script>
async function query(queryBody) {
try {
console.log("query called with", queryBody)
// const response = await fetch("/api/2.0/search", {
// // url: "/api/2.0/search",
// headers: {
// "Content-Type": "application/json",
// accept: "application/json, text/plain, */*",
// "accept-language": "en-US,en;q=0.9",
// "cache-control": "no-cache",
// pragma: "no-cache",
// "sec-fetch-dest": "empty",
// "sec-fetch-mode": "cors",
// "sec-fetch-site": "same-origin",
// },
// method: "POST",
// mode: "cors",
// credentials: "include",
// body: queryBody,
// });
// const jsonResponse = await response.json();
// return jsonResponse;
} catch (error) {
alert("Error in api calling. ");
}
}
let messageFields = [
"attachments",
"author",
"board",
"board_relative_id",
"body",
"can_accept_solution",
"canonical_url",
"context_workflow",
"context_id",
"context_url",
"contributors",
"conversation",
"conver_image",
"current_revision",
"custom_tag_scope",
"custom_tags",
"depth",
"device_id",
"excluded_from_kudos_lea",
"href",
"id",
"images",
"is_answer",
"is_escalated",
"is_image_comment",
"is_promoted",
"is_solution",
"kudos",
"labels",
"language",
"last_publish_time",
"manual_sort",
"me_toos",
"metrics",
"moderation_approval_date",
"moderation_status",
"moderation_style",
"moderation_style",
"occasion_data",
"parent",
"placeholder",
"popularity",
"post_time",
"post_time_friendly",
"ratings",
"read_only",
"replies",
"search_snippet",
"seo_description",
"seo_title",
"soluation_data",
"status",
"subject",
"tags",
"teaser",
"tkb_helpfulness_ratings",
"topic",
"user_context",
"videos",
"view_href",
"winner",
]
function handleResponse(response) {
const strignifiedResponse = JSON.stringify(response, null, 2);
document.getElementById("result-box").innerText = strignifiedResponse;
}
new Vue({
el: "#main-container",
data: {
successed: false,
selectedCollection: null,
collections: [
{
name: "messages",
fields: messageFields.map(i => ({
dataKey: i,
isChecked: false
}))
},
]
},
methods: {
submitQuery: async function (inputText) {
let jsonParsed;
try {
jsonParsed = JSON.stringify(JSON.parse(inputText));
console.log("value is ", jsonParsed);
} catch (error) {
alert("invalid json");
return;
}
const queryResponse = await query(jsonParsed);
this.successed = true
handleResponse(queryResponse);
}
}
})
</script>
<style>
#input-box {
height: 300px;
width: 90%;
}
#result-box {
height: 300px;
width: 90%;
border-style: solid;
border-width: 0.5 px;
border-color: grey;
border-radius: 8px;
}
.fieldsList {
display: flex;
margin-left: 3rem;
margin-top: 3rem;
margin-bottom: 1rem;
flex-direction: column;
}
.fieldsTitle {
margin-bottom: 2rem;
}
.field {
margin-bottom: 1rem;
}
</style>
```