From 9fff98431ac0ca4241de8ad4e6fae572fca8312e Mon Sep 17 00:00:00 2001 From: Jeff Niu Date: Sun, 17 Dec 2017 14:08:00 -0800 Subject: [PATCH] Added some comments --- superset/assets/javascripts/dashboard/reducers.js | 8 +++++--- superset/assets/visualizations/table.js | 7 ++++++- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/superset/assets/javascripts/dashboard/reducers.js b/superset/assets/javascripts/dashboard/reducers.js index 5fbd49d7c035f..0ee7964ab1218 100644 --- a/superset/assets/javascripts/dashboard/reducers.js +++ b/superset/assets/javascripts/dashboard/reducers.js @@ -144,10 +144,10 @@ export const dashboard = function (state = {}, action) { '__time_grain', '__time_origin', '__granularity']; if (filterKeys.indexOf(col) >= 0 || selectedSlice.formData.groupby.indexOf(col) !== -1) { - let newFilter = {}; if (!(sliceId in filters)) { - newFilter = { [col]: vals } + // Straight up set the filters if none existed for the slice + newFilter = { [col]: vals }; } else if (filters[sliceId] && !(col in filters[sliceId]) || !merge) { newFilter = { ...filters[sliceId], [col]: vals }; // d3.merge pass in array of arrays while some value form filter components @@ -169,9 +169,11 @@ export const dashboard = function (state = {}, action) { [actions.REMOVE_FILTER]() { const { sliceId, col, vals, refresh } = action; const excluded = new Set(vals); - const valFilter = (val) => !excluded.has(val); + const valFilter = val => !excluded.has(val); let filters = state.filters; + // Have to be careful not to modify the dashboard state so that + // the render actually triggers if (sliceId in state.filters && col in state.filters[sliceId]) { const newFilter = filters[sliceId][col].filter(valFilter); filters = { ...filters, [sliceId]: newFilter }; diff --git a/superset/assets/visualizations/table.js b/superset/assets/visualizations/table.js index c4f10fdb51658..6af73ca46505c 100644 --- a/superset/assets/visualizations/table.js +++ b/superset/assets/visualizations/table.js @@ -120,7 +120,12 @@ function tableVis(slice, payload) { .attr('data-sort', function (d) { return (d.isMetric) ? d.val : null; }) - .classed('filtered', d => filters && filters[d.col] && filters[d.col].indexOf(d.val) >= 0) + // Check if the dashboard currently has a filter for each row + .classed('filtered', d => + filters && + filters[d.col] && + filters[d.col].indexOf(d.val) >= 0, + ) .on('click', function (d) { if (!d.isMetric && fd.table_filter) { const td = d3.select(this);