Portal widget - New filter for embedded widget - table not refreshed after click

Dominik11
Tera Contributor

Hi,

I created a widget that has an embedded widget (widget-data-table).

The widget shows a table (task_time_worked) and I added a dropdown-filter for filtering the list on table-field "worked_on". The filter looks like this:

Dominik11_0-1700123691848.png

My goal is that if I click a filter, the table from the embedded widget is refreshed automatically. But this does not work.

 

 

When I initially load the page, the table is shown: 

Dominik11_1-1700124444496.png

 

When I then click a filter, it looks like this, without the correct data (yes I checked, there is data for that filter 😉 For example "this week" there should be 3 records on that list )

Dominik11_2-1700124511007.png

 

HTML-Code:

<div class="browse-content-container">
<div ng-class="data.isMobileApp ? 'browse-elevation-mobile': 'browse-elevation'">

<div class="box-header-title">
<h3 class="title-item">${My time worked}</h3>
</div>

<div class="box-header-title p-v-2">
<!-- Filter-Button und Dropdown-Menü hinzufügen -->

<div class="btn-group">

<button class="btn btn-secondary btn-lg" type="button">
Filter by date: {{ c.data.selectedFilter || 'All' }}
</button>
<button type="button" class="btn btn-lg btn-secondary dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<span class="sr-only">Toggle Dropdown</span>
</button>

<div class="dropdown-menu">
<a class="dropdown-item" href="#" ng-click="c.data.applyFilter('Today')">Today</a>
<a class="dropdown-item" href="#" ng-click="c.data.applyFilter('This week')">This week</a>
<a class="dropdown-item" href="#" ng-click="c.data.applyFilter('This month')">This month</a>
<a class="dropdown-item" href="#" ng-click="c.data.applyFilter('Last week')">Last week</a>
<a class="dropdown-item" href="#" ng-click="c.data.applyFilter('Last month')">Last month</a>
<a class="dropdown-item" href="#" ng-click="c.data.applyFilter('This year')">This year</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="#" ng-click="c.data.applyFilter('All')">All</a>

</div>
</div>
</div>

<sp-widget ng-if="data.dataTableWidget" widget="data.dataTableWidget"></sp-widget>

</div>
</div>

 

Client script:

api.contoller = function($scope, spUtil, $location, spAriaFocusManager) {
var c = this;
$scope.c.data = $scope.c.data || {};
 
// Clicking the filter
$scope.c.data.applyFilter = function(filterOption) {
spUtil.update($scope, 'applyFilter', {
filterOption: filterOption
});
$scope.c.data.selectedFilter = filterOption;
};
 
//Clicking on a record in the table
$scope.$on('data_table.click', function(e, parms) {
var p = $scope.c.data.page_id || 'its_time_worked_record';
var s = {
id: p,
table: parms.table,
sys_id: parms.sys_id,
view: 'Time_worked_portal'
};
var newURL = $location.search(s);
spAriaFocusManager.navigateToLink(newURL.url());
});
}

 

Server script:

 

(function() {
    /*  "use strict"; - linter issues */
    // populate the 'data' object
    var sp_page = $sp.getValue('sp_page');
    var pageGR = new GlideRecord('sp_page');
    pageGR.get(sp_page);
    data.page_id = pageGR.getValue("id");
    $sp.getValues(data);
    if (data.field_list) {
        data.fields_array = data.field_list.split(',');
    } else {
        data.field_list = $sp.getListColumns(data.table);
    }
 
    if (input) {
        data.p = input.p;
        data.o = input.o;
        data.d = input.d;
        data.q = input.q;
    }
    data.p = data.p || 1;
    data.o = data.o || $sp.getValue('order_by');
    data.d = data.d || $sp.getValue('order_direction');
 
    data.page_index = (data.p - 1);
    data.window_size = $sp.getValue('maximum_entries') || 10;
    data.window_start = (data.page_index * data.window_size);
    data.window_end = (((data.page_index + 1) * data.window_size));
//$sp.getValue("filter") = "is dynamic - me" to show always only data from the user who loads the page
data.filterInput = $sp.getValue("filter");
 
    var gr = new GlideRecordSecure(data.table);
    if (!gr.isValid()) {
        data.invalid_table = true;
        data.table_label = data.table;
        return;
    }
    data.table_label = gr.getLabel();
 
    options.table = data.table;
    options.fields = data.field_list;
    options.o = data.o;
    options.d = data.d;
    options.filter = data.filter;
    options.window_size = data.window_size;
    options.view = data.view;
    options.useInstanceTitle = true;
    options.headerTitle = options.title;
    options.show_breadcrumbs = true;
options.hide_header=true;
options.show_keywords=true;
 
    // Function for applying filter
    data.applyFilter = function(filterOption) {
        switch (filterOption) {
            case 'All':
                data.filter = data.filterInput;
                break;
            case 'Today':
                data.filter = "u_worked_onONToday@javascript&colon;gs.beginningOfToday()@javascript&colon;gs.endOfToday()^ORu_work_startONToday@javascript&colon;gs.beginningOfToday()@javascript&colon;gs.endOfToday()^" + data.filterInput;
                break;
            case 'This week':
                data.filter = "u_worked_onONThis week@javascript&colon;gs.beginningOfThisWeek()@javascript&colon;gs.endOfThisWeek()^ORu_work_startONThis week@javascript&colon;gs.beginningOfThisWeek()@javascript&colon;gs.endOfThisWeek()^" + data.filterInput;
                break;
            case 'This month':
                data.filter = "u_worked_onONThis month@javascript&colon;gs.beginningOfThisMonth()@javascript&colon;gs.endOfThisMonth()^ORu_work_startONThis month@javascript&colon;gs.beginningOfThisMonth()@javascript&colon;gs.endOfThisMonth()^" + data.filterInput;
                break;
            case 'Last week':
                data.filter = "u_worked_onONLast week@javascript&colon;gs.beginningOfLastWeek()@javascript&colon;gs.endOfLastWeek()^ORu_work_startONLast week@javascript&colon;gs.beginningOfLastWeek()@javascript&colon;gs.endOfLastWeek()^" + data.filterInput;
                break;
            case 'Last month':
                data.filter = "u_worked_onONLast month@javascript&colon;gs.beginningOfLastMonth()@javascript&colon;gs.endOfLastMonth()^ORu_work_startONLast month@javascript&colon;gs.beginningOfLastMonth()@javascript&colon;gs.endOfLastMonth()^" + data.filterInput;
                break;
            case 'This year':
                data.filter = "u_worked_onONThis year@javascript&colon;gs.beginningOfThisYear()@javascript&colon;gs.endOfThisYear()^ORu_work_startONThis year@javascript&colon;gs.beginningOfThisYear()@javascript&colon;gs.endOfThisYear()^" + data.filterInput;
                break;
            default:
                data.filter = data.filterInput;
        }
    };
    data.dataTableWidget = $sp.getWidget('widget-data-table', options);
})();

 

Would be great if you can help me / have ideas.

 

Best regards

Dominik

0 REPLIES 0