Dashboards & Visualizations

Row highlighting lag issue

spkriyaz
Path Finder

Hi,

I have the JS and CSS created to highlight the row based on my search result. Instead of highlighting the row, I have done encircling the row with blue color to show that is the data for the chosen filter.

Issue:

Initially when the dashboard is loaded and when I chose the filter the row encircling doesn't work but after flipping(choosing different option) the filter option it works fine.

Could you please let me know do I need to add anything to the below JS to fix the issue to get the row encircling when the dashboard loads initially.

JS:

 

/* TODO: jink to replace theme_utils with that from core */
require.config({
  paths: {
    theme_utils: '../app/simple_xml_examples/theme_utils'
  }
});

require([
    'underscore',
    'jquery',
    'splunkjs/mvc',
    'splunkjs/mvc/tableview',
    'theme_utils',
    'splunkjs/mvc/simplexml/ready!'
], function(_, $, mvc, TableView, themeUtils) {

    var isDarkTheme = themeUtils.getCurrentTheme && themeUtils.getCurrentTheme() === 'dark';

     // Row Coloring Example with custom, client-side range interpretation

    var CustomRangeRenderer = TableView.BaseCellRenderer.extend({
        canRender: function(cell) {
            // Enable this custom cell renderer for both the ACK_DATE_TIME and the ACK_BY field
            return _(['posting_date', 'Chosen_Row', 'chosen_row']).contains(cell.field);
        },
        render: function($td, cell) {
            // Add a class to the cell based on the returned value
            var value = cell.value;

            // Apply interpretation for number of historical searches
            if (cell.field === 'Chosen_Row') {
                if (value === 'Yes') {
                    $td.addClass('range-cell').addClass('range-severe');
                }
            }

            // Apply interpretation for number of realtime searches
            if (cell.field === 'chosen_row' | cell.field === 'Chosen_Row') {
                if (value === 'Yes') {
                    $td.addClass('range-cell').addClass('range-severe');
                }
            }

            // Update the cell content
            $td.text(value);
        }
    });

    mvc.Components.get('highlight').getVisualization(function(tableView) {
        tableView.on('rendered', function() {
            // Apply class of the cells to the parent row in order to color the whole row
            tableView.$el.find('td.range-cell').each(function() {
                $(this).parents('tr').addClass(this.className);
            });

            if(isDarkTheme){
              tableView.$el.find('td.timestamp').each(function() {
                 $(this).parents('tr').addClass('dark');
              });
            }
        });
        // Add custom cell renderer, the table will re-render automatically.
        tableView.addCellRenderer(new CustomRangeRenderer());
    });
	
	    mvc.Components.get('highlight1').getVisualization(function(tableView) {
        tableView.on('rendered', function() {
            // Apply class of the cells to the parent row in order to color the whole row
            tableView.$el.find('td.range-cell').each(function() {
                $(this).parents('tr').addClass(this.className);
            });

            if(isDarkTheme){
              tableView.$el.find('td.timestamp').each(function() {
                 $(this).parents('tr').addClass('dark');
              });
            }
        });
        // Add custom cell renderer, the table will re-render automatically.
        tableView.addCellRenderer(new CustomRangeRenderer());
    });

});

 

CSS:

 

/* Custom Icons */

td.icon {
    text-align: center;
}

td.icon i {
    font-size: 25px;
    text-shadow: 1px 1px #aaa;
}

td.icon .severe {
    color: red;
}

td.icon .elevated {
    color: orangered;
}

td.icon .low {
    color: #006400;
}

/* Row Coloring for selected posting_date */

#highlight tr.range-severe td {
    border: solid rgba(0,164,253,.6)  !important; 
    border-width: 4px 0px 4px 1px  !important;
	font-weight: bold;
}

#highlight1 tr.range-severe td {
    border: solid rgba(0,164,253,.6)  !important; 
    border-width: 4px 0px 4px 1px  !important;
	font-weight: bold;
}

/* Row Coloring */

.icon-inline i {
    font-size: 18px;
    margin-left: 5px;
}
.icon-inline i.icon-alert-circle {
    color: #ef392c;
}
.icon-inline i.icon-alert {
    color: #ff9c1a;
}
.icon-inline i.icon-check {
    color: #5fff5e;
}

/* Dark Theme */

td.icon i.dark {
    text-shadow: none;
}

/* Row Coloring */

#highlight tr.dark td {
    background-color: #5BA383 !important;
}

#highlight tr.range-elevated.dark td {
    background-color: #EC9960 !important;
}

#highlight tr.range-severe.dark td {
    background-color: #AF575A !important;
}

#highlight .table .dark td {
    border-top: 1px solid #000000;
    color: #F2F4F5;
}

#highlight1 tr.dark td {
    background-color: #5BA383 !important;
}

#highlight1 tr.range-elevated.dark td {
    background-color: #EC9960 !important;
}

#highlight1 tr.range-severe.dark td {
    background-color: #AF575A !important;
}


#highlight1 .table .dark td {
    border-top: 1px solid #000000;
    color: #F2F4F5;
}

 

 

Labels (2)
Tags (1)
0 Karma

niketn
Legend

@spkriyaz refer to one of the issues mentioned for Splunk 6.6+ which required in lag for table rendered function call:  https://community.splunk.com/t5/All-Apps-and-Add-ons/Splunk-Dashboard-Examples-Table-Row-highlightin...

You would need to add a small setTimeout() for the tableView.on('rendered', function() { , function call. Please try out and confirm!

____________________________________________
| makeresults | eval message= "Happy Splunking!!!"
0 Karma

spkriyaz
Path Finder

Hi @niketn ,

I tried applying the setTimeout() function to my JS but it doesn't work. Could you please check is there anything I missed in the below JS and CSS.

JS:

require([
    'underscore',
    'jquery',
    'splunkjs/mvc',
    'splunkjs/mvc/tableview',
    'theme_utils',
    'splunkjs/mvc/simplexml/ready!'
], function(_, $, mvc, TableView, themeUtils) {

     // Row Coloring Example with custom, client-side range interpretation

    var CustomRangeRenderer = TableView.BaseCellRenderer.extend({
        canRender: function(cell) {
            // Enable this custom cell renderer for both the ACK_DATE_TIME and the ACK_BY field
            return _(['posting_date', 'Chosen_Row', 'chosen_row']).contains(cell.field);
        },
        render: function($td, cell) {
            // Add a class to the cell based on the returned value
            var value = cell.value;

            // Apply interpretation for number of historical searches
            if (cell.field === 'Chosen_Row') {
                if (value === 'Yes') {
                    $td.addClass('range-cell').addClass('range-severe');
                }
            }

            // Apply interpretation for number of realtime searches
            if (cell.field === 'chosen_row' | cell.field === 'Chosen_Row') {
                if (value === 'Yes') {
                    $td.addClass('range-cell').addClass('range-severe');
                }
            }

            // Update the cell content
            $td.text(value);
        }
    });

    mvc.Components.get('highlight').getVisualization(function(tableView) {
        tableView.on('rendered', function() {
			setTimeout(function(){ 
				// Apply class of the cells to the parent row in order to color the whole row
				  tableView.$el.find('td.range-cell').each(function() {
					$(this).parents('tr').addClass(this.className);
				 });
		    },100);
        });
        // Add custom cell renderer, the table will re-render automatically.
        tableView.addCellRenderer(new CustomRangeRenderer());
    });
	
	    mvc.Components.get('highlight1').getVisualization(function(tableView) {
        tableView.on('rendered', function() {
			setTimeout(function(){ 
				// Apply class of the cells to the parent row in order to color the whole row
				tableView.$el.find('td.range-cell').each(function() {
					$(this).parents('tr').addClass(this.className);
				});
			},100);
        });
        // Add custom cell renderer, the table will re-render automatically.
        tableView.addCellRenderer(new CustomRangeRenderer());
    });

});

CSS:

/* Custom Icons */

td.icon {
    text-align: center;
}

td.icon i {
    font-size: 25px;
    text-shadow: 1px 1px #aaa;
}

td.icon .severe {
    color: red;
}

td.icon .elevated {
    color: orangered;
}

td.icon .low {
    color: #006400;
}

/* Row Coloring for selected posting_date */

#highlight tr.range-severe td {
    border: solid rgba(0,164,253,.6)  !important; 
    border-width: 4px 0px 4px 1px  !important;
	font-weight: bold;
}

#highlight1 tr.range-severe td {
    border: solid rgba(0,164,253,.6)  !important; 
    border-width: 4px 0px 4px 1px  !important;
	font-weight: bold;
}

/* Row Coloring */

.icon-inline i {
    font-size: 18px;
    margin-left: 5px;
}
.icon-inline i.icon-alert-circle {
    color: #ef392c;
}
.icon-inline i.icon-alert {
    color: #ff9c1a;
}
.icon-inline i.icon-check {
    color: #5fff5e;
}

/* Dark Theme */

td.icon i.dark {
    text-shadow: none;
}

/* Row Coloring */

#highlight tr.dark td {
    background-color: #5BA383 !important;
}

#highlight tr.range-elevated.dark td {
    background-color: #EC9960 !important;
}

#highlight tr.range-severe.dark td {
    background-color: #AF575A !important;
}

#highlight .table .dark td {
    border-top: 1px solid #000000;
    color: #F2F4F5;
}

#highlight1 tr.dark td {
    background-color: #5BA383 !important;
}

#highlight1 tr.range-elevated.dark td {
    background-color: #EC9960 !important;
}

#highlight1 tr.range-severe.dark td {
    background-color: #AF575A !important;
}


#highlight1 .table .dark td {
    border-top: 1px solid #000000;
    color: #F2F4F5;
}
0 Karma
Got questions? Get answers!

Join the Splunk Community Slack to learn, troubleshoot, and make connections with fellow Splunk practitioners in real time!

Meet up IRL or virtually!

Join Splunk User Groups to connect and learn in-person by region or remotely by topic or industry.

Get Updates on the Splunk Community!

Preparing your Splunk Environment for OpenSSL3

The Splunk platform will transition to OpenSSL version 3 in a future release. Actions are required to prepare ...

Announcing Modern Navigation: A New Era of Splunk User Experience

We are excited to introduce the Modern Navigation feature in the Splunk Platform, available to both cloud and ...

Catalog Is Now Generally Available on Splunk Cloud Platform

A Unified View of Your Data  Security logs, application events, business data, and historical telemetry often ...