From a9ff51bd6133559c71a43318f46c80e0fe913618 Mon Sep 17 00:00:00 2001 From: Grace Guo Date: Mon, 30 Mar 2020 15:05:04 -0700 Subject: [PATCH] [fix] dashboard filter indicator no showing single number value (#9401) --- .../FilterIndicatorsContainer_spec.jsx | 21 +++++++++++++++++++ .../components/FilterIndicatorsContainer.jsx | 17 +++++++++------ 2 files changed, 32 insertions(+), 6 deletions(-) diff --git a/superset-frontend/spec/javascripts/dashboard/components/FilterIndicatorsContainer_spec.jsx b/superset-frontend/spec/javascripts/dashboard/components/FilterIndicatorsContainer_spec.jsx index 089f185409020..a256a9e3d1aac 100644 --- a/superset-frontend/spec/javascripts/dashboard/components/FilterIndicatorsContainer_spec.jsx +++ b/superset-frontend/spec/javascripts/dashboard/components/FilterIndicatorsContainer_spec.jsx @@ -85,4 +85,25 @@ describe('FilterIndicatorsContainer', () => { const wrapper = setup({ dashboardFilters: overwriteDashboardFilters }); expect(wrapper.find(FilterIndicator)).toHaveLength(0); }); + + it('should show single number type value', () => { + const overwriteDashboardFilters = { + ...dashboardFilters, + [filterId]: { + ...dashboardFilters[filterId], + columns: { + testField: 0, + }, + }, + }; + const wrapper = setup({ dashboardFilters: overwriteDashboardFilters }); + expect(wrapper.find(FilterIndicator)).toHaveLength(1); + + const indicatorProps = wrapper + .find(FilterIndicator) + .first() + .props().indicator; + expect(indicatorProps.label).toEqual('testField'); + expect(indicatorProps.values).toEqual([0]); + }); }); diff --git a/superset-frontend/src/dashboard/components/FilterIndicatorsContainer.jsx b/superset-frontend/src/dashboard/components/FilterIndicatorsContainer.jsx index 549d3838f0448..632942e469ca6 100644 --- a/superset-frontend/src/dashboard/components/FilterIndicatorsContainer.jsx +++ b/superset-frontend/src/dashboard/components/FilterIndicatorsContainer.jsx @@ -18,7 +18,7 @@ */ import React from 'react'; import PropTypes from 'prop-types'; -import { isEmpty } from 'lodash'; +import { isEmpty, isNil } from 'lodash'; import FilterIndicator from './FilterIndicator'; import FilterIndicatorGroup from './FilterIndicatorGroup'; @@ -101,6 +101,15 @@ export default class FilterIndicatorsContainer extends React.PureComponent { chartId, column: name, }); + + // filter values could be single value or array of values + const values = + isNil(columns[name]) || + (isDateFilter && columns[name] === 'No filter') || + (Array.isArray(columns[name]) && columns[name].length === 0) + ? [] + : [].concat(columns[name]); + const indicator = { chartId, colorCode: dashboardFiltersColorMap[colorMapKey], @@ -110,11 +119,7 @@ export default class FilterIndicatorsContainer extends React.PureComponent { isInstantFilter, name, label: labels[name] || name, - values: - isEmpty(columns[name]) || - (isDateFilter && columns[name] === 'No filter') - ? [] - : [].concat(columns[name]), + values, isFilterFieldActive: chartId === filterFieldOnFocus.chartId && name === filterFieldOnFocus.column,