"All" choice of the interactive filter/ multiselect custom interactive filter
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-22-2024 05:44 AM
Hi everyone,
I would need to remove the default all entry of the choice interactive filter. I have read a few posts and apparently it is not possible. Do you confirm this? As an alternative I have used the examples to create a custom interactive filter by replacing the default "all" entry to "--none--". I report the code below. Now my problem is to make it multiselect, how can I do that?
<?xml version="1.0" encoding="utf-8" ?>
<j:jelly trim="false" xmlns:j="jelly:core" xmlns:g="glide" xmlns:j2="null" xmlns:g2="null">
<g:evaluate>
var widget_title = "BR Template";
var showEmpty = false;
var filterDebug = false;
var tables_fields = JSON.stringify([
{table:"dmn_demand",field:"u_br"},
{table:"pm_project",field:"u_br"}
]);
</g:evaluate>
<!-- Stop Here If Previewing (Crash Prevention) -->
<j:if test="${RP.isPreview()}">
<center>${gs.getMessage('No preview available')}</center>
</j:if>
<!-- Proceed If Not Previewing -->
<j:if test="${!RP.isPreview()}">
<!-- Set Unique Identifier -->
<g:evaluate>
var uid = 'UID_' + Math.round(Math.random() * 1000000000000000)
</g:evaluate>
<!-- Build Choice List -->
<g:evaluate var="jvar_cl" object="true" jelly="true">
var cl = new GlideChoiceList();
var ga = new GlideAggregate('sys_choice');
ga.addQuery('name', 'dmn_demand');
ga.addQuery('element', 'u_br');
ga.addQuery('inactive', false);
ga.groupBy('label');
ga.groupBy('value');
ga.orderBy('label');
ga.query();
while (ga.next()) {
cl.add(ga.getValue('value'), ga.getValue('label'));
}
if (showEmpty) {
cl.add('NULL', '(Empty)');
}
cl;
</g:evaluate>
<script>
<!-- Initialize Scoped Filter -->
var container${uid} = document.getElementById('${uid}_display').closest('[data-uuid]');
var customFilter${uid} = {
select: $j('#${uid}_select'),
widgetId: container${uid}.getAttribute("data-original-widget-sysid"),
canvasId: SNC.canvas.layoutJson.canvasSysId,
eventsId: container${uid}.getAttribute("data-uuid"),
setTitle: $j('#${uid}_display').closest('[data-uuid]').find('.grid-widget-header-title:first').html('<span>${widget_title}</span>'),
removeFilter: function() { <!-- Remove filter on "None" -->
SNC.canvas.interactiveFilters.removeDefaultValue(customFilter${uid}.widgetId, false);
dashboardMessageHandler${uid}.removeFilter();
},
resetFilter: function() { <!-- Reset filter (& subcategory) on events -->
if (customFilter${uid}.select.val() != "--None--") {
customFilter${uid}.select.val("--None--")
customFilter${uid}.select.change()
}
},
wgtDelBtn: container${uid}.querySelector('button[data-original-title="Remove"]'),
wgtRelBtn: container${uid}.querySelector('button[data-original-title="Refresh"]'),
tabCfgBtn: document.getElementById("navbar").querySelector('button[data-original-title="Configuration"]'),
tabDelBtn: document.getElementById("modalBtnPrimary"),
destroyed: false,
eventCallback: function(data) { <!-- EVENTS: Refresh, Remove, Configuration, DeleteDashboardTab, TabChange, resize, destroy -->
var event = this instanceof Element ? (this.getAttribute("data-original-title") ? this.getAttribute("data-original-title") : 'DeleteDashboardTab') : (customFilter${uid}.destroyed ? data.action : (data.action == 'resize' ? 'resize' : 'TabChange'))
<!-- Unbind Event Listeners -->
if (event == 'Refresh' || event == 'Remove' || event == 'DeleteDashboardTab' || event == 'TabChange') {
customFilter${uid}.resetFilter();
customFilter${uid}.wgtDelBtn.removeEventListener("click",customFilter${uid}.eventCallback)
customFilter${uid}.tabDelBtn.removeEventListener("click",customFilter${uid}.eventCallback)
customFilter${uid}.tabCfgBtn.removeEventListener("click",customFilter${uid}.eventCallback)
}
<!-- Rebind Events After Configuration Resets Them -->
if (event == 'Configuration') {setTimeout(bindEvents${uid}, 1000)}
<!-- Handle Widget Destroy -->
if (event == "Remove" || event == "DeleteDashboardTab") {
customFilter${uid}.destroyed = true
}
},
};
<!-- Call Handle, Events Subscription, and jQuery's select2() -->
dashboardMessageHandler${uid} = new DashboardMessageHandler(customFilter${uid}.widgetId)
SNC.canvas.eventbus.subscribe(customFilter${uid}.eventsId,customFilter${uid}.eventCallback)
customFilter${uid}.select.select2(); //transforms select into combobox
<!-- Bind Widget Reload/Delete & Tab Delete Listeners -->
function bindEvents${uid}() {
customFilter${uid}.wgtRelBtn.addEventListener("click",customFilter${uid}.eventCallback,{once:true})
customFilter${uid}.wgtDelBtn.addEventListener("click",customFilter${uid}.eventCallback,{once:true})
customFilter${uid}.tabCfgBtn.addEventListener("click",customFilter${uid}.eventCallback,{once:true})
customFilter${uid}.tabDelBtn.addEventListener("click",customFilter${uid}.eventCallback,{once:true})
}
bindEvents${uid}()
<!-- Function for Handling Changes -->
function selectChange${uid}() {
<!-- Handle Self -->
value${uid} = customFilter${uid}.select.val();
tablesFields${uid} = JSON.parse("${tables_fields}");
if (value${uid} == "--None--") {
customFilter${uid}.removeFilter();
} else {
var finalFilter${uid} = [];
for (var i = 0; i != tablesFields${uid}.length; i++) {
finalFilter${uid}.push({table: tablesFields${uid}[i].table, filter: tablesFields${uid}[i].field + '=' + value${uid},
});
}
SNC.canvas.interactiveFilters.setDefaultValue({id: customFilter${uid}.widgetId, filters: finalFilter${uid}}, false);
dashboardMessageHandler${uid}.publishMessage(finalFilter${uid});
}
<!-- Handle Subcategory Filter -->
setTimeout(function() { <!-- slight delay allows subcategory filter to render in time -->
var subcatID = document.querySelector('select[data-id="Incident Subcategory Custom Filter"]').getAttribute("data-uid");
window['buildChoicesCallback'+subcatID]();},50)
}
<!-- Add Debug Messages If Debug On -->
if (${filterDebug}) {$j('#${uid}_debug').append('<p style="line-height: 8px; padding-top: 8px;"><b>UID</b>: ${uid}<br/><b>Widget ID</b>: '+customFilter${uid}.widgetId+'<br/><b>Canvas ID</b>: '+customFilter${uid}.canvasId+'<br/><b>Events ID</b>: '+customFilter${uid}.eventsId+'</p>');}
</script>
<!-- Place Filter On Screen -->
<div id="${uid}_display" class="select2-container form-control">
<select id="${uid}_select" data-id="BR Custom Filter" data-uid="${uid}" class="form-control" value="--None--" onchange="selectChange${uid}()">
<option value="--None--">--None--</option>
<g:options choiceList="${jvar_cl}" />
</select>
</div>
<div id="${uid}_debug"></div>
<!-- End of Preview Prevention -->
</j:if>
</j:jelly>
0 REPLIES 0