This commit is contained in:
@@ -11,6 +11,7 @@
|
|||||||
item-text="name"
|
item-text="name"
|
||||||
item-value="id"
|
item-value="id"
|
||||||
item-disabled="!active"
|
item-disabled="!active"
|
||||||
|
:error-messages="errors"
|
||||||
:loading="searchUnderway"
|
:loading="searchUnderway"
|
||||||
:placeholder="lt('search hint here')"
|
:placeholder="lt('search hint here')"
|
||||||
:no-data-text="lt('NoData')"
|
:no-data-text="lt('NoData')"
|
||||||
@@ -91,6 +92,7 @@ export default {
|
|||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
sourceresults: [],
|
sourceresults: [],
|
||||||
|
errors: [],
|
||||||
selected: { name: "-", id: 0 },
|
selected: { name: "-", id: 0 },
|
||||||
searchEntry: null,
|
searchEntry: null,
|
||||||
searchUnderway: false
|
searchUnderway: false
|
||||||
@@ -122,6 +124,9 @@ export default {
|
|||||||
watch: {
|
watch: {
|
||||||
searchEntry(val) {
|
searchEntry(val) {
|
||||||
var vm = this;
|
var vm = this;
|
||||||
|
//clear any local errors
|
||||||
|
vm.errors = [];
|
||||||
|
|
||||||
if (!val || vm.searchUnderway) {
|
if (!val || vm.searchUnderway) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -131,9 +136,74 @@ export default {
|
|||||||
if (val == vm.selected.name) {
|
if (val == vm.selected.name) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
//console.log("vm.selected=", vm.selected);
|
|
||||||
//debugger;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Pre-process the query to validate and send conditionally
|
||||||
|
|
||||||
|
//get the discrete search terms and verify there are max two
|
||||||
|
var isATwoTermQuery = false;
|
||||||
|
var queryTerms = [];
|
||||||
|
if (val.includes(" ")) {
|
||||||
|
queryTerms = val.split(" ");
|
||||||
|
if (queryTerms.length > 2) {
|
||||||
|
//todo: put client side localized validation error message in component
|
||||||
|
vm.errors.push("LTERROR TOO MANY TERMS");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
isATwoTermQuery = true;
|
||||||
|
} else {
|
||||||
|
//one term only so push it into array
|
||||||
|
queryTerms.push(val);
|
||||||
|
//Marker term, will be weeded back out later
|
||||||
|
queryTerms.push("[?]");
|
||||||
|
}
|
||||||
|
|
||||||
|
//Now vet the terms
|
||||||
|
|
||||||
|
//Is user in mid entry of a second tag (space only?)
|
||||||
|
//will appear as an empty string post split
|
||||||
|
if (queryTerms[1] == "") {
|
||||||
|
//mid entry of a second term, just return
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Is user in mid entry of tag query, just bounce back
|
||||||
|
if (
|
||||||
|
queryTerms[0] == "." ||
|
||||||
|
queryTerms[0] == ".." ||
|
||||||
|
queryTerms[1] == "." ||
|
||||||
|
queryTerms[1] == ".."
|
||||||
|
) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isATwoTermQuery) {
|
||||||
|
//check that both terms aren't tags
|
||||||
|
if (
|
||||||
|
window.$gz._.startsWith(queryTerms[0], "..") &&
|
||||||
|
window.$gz._.startsWith(queryTerms[1], "..")
|
||||||
|
) {
|
||||||
|
//todo: put client side localized validation error message in component
|
||||||
|
vm.errors.push(
|
||||||
|
"LTERROR if two terms one must be tag and one must be text"
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//check that both aren't non-tags
|
||||||
|
if (
|
||||||
|
!window.$gz._.startsWith(queryTerms[0], "..") &&
|
||||||
|
!window.$gz._.startsWith(queryTerms[1], "..")
|
||||||
|
) {
|
||||||
|
//todo: put client side localized validation error message in component
|
||||||
|
vm.errors.push(
|
||||||
|
"LTERROR if two terms one must be tag and one must be text"
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//QUERY IS VALID
|
||||||
vm.searchUnderway = true;
|
vm.searchUnderway = true;
|
||||||
|
|
||||||
var urlParams = "?ayaType=" + vm.ayaType;
|
var urlParams = "?ayaType=" + vm.ayaType;
|
||||||
|
|||||||
Reference in New Issue
Block a user