From 137b67caf3012b30ce99390483993a30d49229a2 Mon Sep 17 00:00:00 2001 From: Maxime Beauchemin Date: Wed, 14 Aug 2019 14:34:55 -0700 Subject: [PATCH 1/2] fix: datasource save raises React error --- .../assets/src/explore/components/controls/MetricsControl.jsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/superset/assets/src/explore/components/controls/MetricsControl.jsx b/superset/assets/src/explore/components/controls/MetricsControl.jsx index 9498b08752402..cbb4aa8fa1abc 100644 --- a/superset/assets/src/explore/components/controls/MetricsControl.jsx +++ b/superset/assets/src/explore/components/controls/MetricsControl.jsx @@ -54,6 +54,8 @@ const propTypes = { const defaultProps = { onChange: () => {}, clearable: true, + savedMetrics: [], + columns: [], }; function isDictionaryForAdhocMetric(value) { From 055eaa9554f088d29252e234278c9b4cad11991e Mon Sep 17 00:00:00 2001 From: Maxime Beauchemin Date: Wed, 14 Aug 2019 17:42:47 -0700 Subject: [PATCH 2/2] add test --- .../javascripts/explore/components/MetricsControl_spec.jsx | 7 +++++++ .../src/explore/components/controls/MetricsControl.jsx | 4 ++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/superset/assets/spec/javascripts/explore/components/MetricsControl_spec.jsx b/superset/assets/spec/javascripts/explore/components/MetricsControl_spec.jsx index 143bf8f99f900..b6fbf1bacd3bc 100644 --- a/superset/assets/spec/javascripts/explore/components/MetricsControl_spec.jsx +++ b/superset/assets/spec/javascripts/explore/components/MetricsControl_spec.jsx @@ -368,5 +368,12 @@ describe('MetricsControl', () => { wrapper.setProps({ ...props, columns: [] }); expect(onChange.calledOnce).toEqual(false); }); + it('Does not fail if no columns or savedMetrics are passed', () => { + const { wrapper } = setup({ + savedMetrics: null, + columns: null, + }); + expect(wrapper.exists('.metrics-select')).toEqual(true); + }); }); }); diff --git a/superset/assets/src/explore/components/controls/MetricsControl.jsx b/superset/assets/src/explore/components/controls/MetricsControl.jsx index cbb4aa8fa1abc..a998283f0ccfd 100644 --- a/superset/assets/src/explore/components/controls/MetricsControl.jsx +++ b/superset/assets/src/explore/components/controls/MetricsControl.jsx @@ -64,7 +64,7 @@ function isDictionaryForAdhocMetric(value) { function columnsContainAllMetrics(value, nextProps) { const columnNames = new Set( - [...nextProps.columns, ...nextProps.savedMetrics] + [...(nextProps.columns || []), ...(nextProps.savedMetrics || [])] // eslint-disable-next-line camelcase .map(({ column_name, metric_name }) => (column_name || metric_name)), ); @@ -245,7 +245,7 @@ export default class MetricsControl extends React.PureComponent { Object.keys(AGGREGATES).map(aggregate => ({ aggregate_name: aggregate })) : []; const options = [ - ...columns, + ...(columns || []), ...aggregates, ...(savedMetrics || []), ];