Hi Team,
I have multiple "Multiselect" Input on my Dashboard which has search query which populates the result for Multiselect along with a static option of All (*)
Now, i want that whenever anyone selects any one or Multiple values in Multiselect input, "All" should automatically gets removed. Currently the user has to remove "All" and if user doesn't remove "All" then the result is skewed.
The results is getting skewed because we are using OR clause.
For example
When only ALL is selected (default) below search query runs
index=abc | search xzy=* | stats count by xyz
When other values are also selected along with ALL
index=abc | search xzy=* OR xzy=hello OR xzy=hi OR xzy=how | stats count by xyz
Now in the above case since "All" is by default selected, and even person selects other name the results show for all users as xzy=* remains and user has to explicitly remove ALL from the multiselect.
What i am looking for is whenever any user selects anything from the multiselect input, All should automatically be removed/de-selected.
I followed the advice by @jeffland in Link and using the below JS i was able to achieve what i was looking for.
require([
'jquery',
'splunkjs/mvc',
'splunkjs/mvc/simplexml/ready!'
], function($, mvc){
$('#multi').on("change",function(){
var multi1 = mvc.Components.get("multi");
var tokens = mvc.Components.getInstance("default");
var mytoken = tokens.get("multi")
if (mytoken.length > 1 && mytoken.includes("All"))
{
// If "All" was selected before current (more specific) selection, remove it from list
if (indexOfAll == 0)
{
var temp = mytoken.split(" ")
var temp1 = temp[1]
multi1.val(temp1);
} else
{
// "All" was selected last, clear input and leave only "All" in it
multi1.val("All");
}
}
});
});