"All" choice of the interactive filter/ multiselect custom interactive filter

Francesca6
Tera Contributor

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