cancel
Showing results for 
Search instead for 
Did you mean: 
Community_Admin
Community Team Member
Community Team Member

Question

How to show the values selected in the dashboard filter as a Blox widget?

Answer

Our example uses a filter / field called "Fake Names"
First, in your BloX widget's Editor tab:
1. Set "showCarousel" to "true", but add the following option to make the navigation arrows go away:
"showCarousel": true,
"carouselAnimation": {
  "showButtons": false
},

2. Within the specific Text Block / container you want to change, give it an "id" attribute of "text-to-change" and "wrap" attribute as shown in the bolded section below:

"type": "TextBlock",
"text": "{panel:Fake Names}",
"id": "text-to-change",
"wrap": "true",
(Explanation: the "id" helps the widget script in the next steps run properly, and the "wrap" helps all the selected options show up if your user selects lots of them).

Next, edit your widget's script by doing this:
3. Copy and paste the whole script below:
widget.on("ready", function(w, args) {
 
 //make sure the target BloX text has an "id" attribute of "text-to-change"
 
 var yourFilterTitle = "Fake Names"; //insert your filter title here
 //ASSUMPTION: you're using an ordinary "List"-style filter
 
 var filterDetails = w.dashboard.filters.$$items.find(function(element){
  return element.jaql.title === yourFilterTitle;
 }).jaql.filter;
 
 if(filterDetails.all === true) {
  $("#text-to-change").text(yourFilterTitle + ": All")
 } else {
  $("#text-to-change").text(yourFilterTitle + ": " + filterDetails.members.join(", "))
 }
 
});
  1. Change the variable yourFilterTitle to whatever your dashboard filter's title is instead of "Fake Names" - presumably something like "Country".

 

  1. Save all the changes, then refresh the dashboard.

 

I'll show you what my example looks like for "Include All," single-selection, and multiple-selection:

Community_Admin_0-1634631539067.png

 

Community_Admin_1-1634631539179.png

 

Community_Admin_2-1634631539080.png

In addition, the following widget script supports cascaded filters, as well as exclusions.

 

//========================   Configuration  ================================
var yourFilterTitle = "Filter Title Goes Here";
//==========================================================================

widget.on("ready", function(w, args) {
 
 var filterDetails;
 
 //Loop through all filters
 prism.activeDashboard.filters.$$items.forEach((itemFilter) => {
  
  //if the filter is cascaded
  if(itemFilter.isCascading == true){
   //loop through the levels
   for(var k=0; k<itemFilter.levels.length;k++){
    //If the filter title is equal to FilterName (the target filter)
    if(itemFilter.levels[k].title == yourFilterTitle){
     filterDetails = itemFilter.levels[k].filter
    }
   }
  }
  
  //If the filter is not cascaded:
  else{
   //If the filter title is equal to FilterName (the target filter)
   if(itemFilter.jaql.title == yourFilterTitle){
    filterDetails = itemFilter.jaql.filter
   }
  }
 });
 
 if(filterDetails.all === true) {
  $("#text-to-change").text(yourFilterTitle + ": All")
 }else if(filterDetails.exclude){
  $("#text-to-change").text(yourFilterTitle + ": NOT " + filterDetails.exclude.members.join(", "))
 } else {
  $("#text-to-change").text(yourFilterTitle + ": " + filterDetails.members.join(", "))
 }
});

 

Rate this article:
Comments
Jake_Raz
10 - ETL
10 - ETL
//ASSUMPTION: you're using an ordinary "List"-style filter

Would it be possible for this to work with a Text-style filter? The filter I'm using has too many values for a List-style filter to make sense. Rather than making users pick from that, we just use a text "contains" filter that they type in, as its much easier. 

cmdaniels
7 - Data Storage
7 - Data Storage

If I try adding this more than one time in a dashboard none of the widgets with the script applied display correctly. Is there a solution for implementing this for more than one filter result?

Version history
Last update:
‎11-10-2023 11:49 AM
Updated by: