From 5e0c91ef49c29d7b5de8164ccdd0f91cf21ddc0d Mon Sep 17 00:00:00 2001 From: Maxime Beauchemin Date: Thu, 15 Aug 2019 14:13:18 -0700 Subject: [PATCH] fix: onSave datasource raises React error (#8049) * fix: datasource save raises React error * add test --- .../javascripts/explore/components/MetricsControl_spec.jsx | 7 +++++++ .../src/explore/components/controls/MetricsControl.jsx | 6 ++++-- 2 files changed, 11 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 143bf8f99f9..b6fbf1bacd3 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 9498b087524..a998283f0cc 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) { @@ -62,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)), ); @@ -243,7 +245,7 @@ export default class MetricsControl extends React.PureComponent { Object.keys(AGGREGATES).map(aggregate => ({ aggregate_name: aggregate })) : []; const options = [ - ...columns, + ...(columns || []), ...aggregates, ...(savedMetrics || []), ];