From 8a86a78d40250f5f560aa2e2b0d11fb0551867e0 Mon Sep 17 00:00:00 2001 From: Michelle Thomas Date: Tue, 26 Feb 2019 18:15:41 -0800 Subject: [PATCH 1/5] Adding extraOverrides to line chart --- superset/assets/package-lock.json | 9 +++++++++ superset/assets/package.json | 1 + .../src/explore/components/controls/MetricsControl.jsx | 9 ++++++--- superset/assets/src/explore/controlPanels/Line.js | 2 ++ .../assets/src/explore/controlPanels/extraOverrides.js | 3 +++ 5 files changed, 21 insertions(+), 3 deletions(-) create mode 100644 superset/assets/src/explore/controlPanels/extraOverrides.js diff --git a/superset/assets/package-lock.json b/superset/assets/package-lock.json index 9eae0292ecd16..3240f1480dcff 100644 --- a/superset/assets/package-lock.json +++ b/superset/assets/package-lock.json @@ -21977,6 +21977,15 @@ "uuid": "^3.3.2" } }, + "webpack-merge": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.1.tgz", + "integrity": "sha512-4p8WQyS98bUJcCvFMbdGZyZmsKuWjWVnVHnAS3FFg0HDaRVrPbkivx2RYCre8UiemD67RsiFFLfn4JhLAin8Vw==", + "dev": true, + "requires": { + "lodash": "^4.17.5" + } + }, "webpack-sources": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.3.0.tgz", diff --git a/superset/assets/package.json b/superset/assets/package.json index d657698ba5d33..68f21c4d1bafc 100644 --- a/superset/assets/package.json +++ b/superset/assets/package.json @@ -206,6 +206,7 @@ "typescript": "^3.1.3", "url-loader": "^1.0.1", "webpack": "^4.19.0", + "webpack-merge": "^4.2.1", "webpack-assets-manifest": "^3.0.1", "webpack-bundle-analyzer": "^3.0.2", "webpack-cli": "^3.1.1", diff --git a/superset/assets/src/explore/components/controls/MetricsControl.jsx b/superset/assets/src/explore/components/controls/MetricsControl.jsx index 02078ffbfc668..84c160b492f51 100644 --- a/superset/assets/src/explore/components/controls/MetricsControl.jsx +++ b/superset/assets/src/explore/components/controls/MetricsControl.jsx @@ -136,11 +136,14 @@ export default class MetricsControl extends React.PureComponent { componentWillReceiveProps(nextProps) { if ( - isEqual(this.props.columns) !== isEqual(nextProps.columns) || - isEqual(this.props.savedMetrics) !== isEqual(nextProps.savedMetrics) + !isEqual(this.props.columns, nextProps.columns) || + !isEqual(this.props.savedMetrics, nextProps.savedMetrics) ) { this.setState({ options: this.optionsForSelect(nextProps) }); - this.props.onChange([]); + // Remove metrics if selected value no longer a column + if (nextProps.columns.indexOf(this.state.value) >= 0) { + this.props.onChange([]); + } } if (this.props.value !== nextProps.value) { this.setState({ value: coerceAdhocMetrics(nextProps.value) }); diff --git a/superset/assets/src/explore/controlPanels/Line.js b/superset/assets/src/explore/controlPanels/Line.js index 012976a6ec1be..498c2e6ff056d 100644 --- a/superset/assets/src/explore/controlPanels/Line.js +++ b/superset/assets/src/explore/controlPanels/Line.js @@ -19,6 +19,7 @@ import { t } from '@superset-ui/translation'; import { NVD3TimeSeries, annotations } from './sections'; import { D3_TIME_FORMAT_OPTIONS } from '../controls'; +import extraOverrides from './extraOverrides'; export default { requiresTime: true, @@ -63,5 +64,6 @@ export default { row_limit: { default: 50000, }, + ...extraOverrides, }, }; diff --git a/superset/assets/src/explore/controlPanels/extraOverrides.js b/superset/assets/src/explore/controlPanels/extraOverrides.js new file mode 100644 index 0000000000000..1403a4aaacb33 --- /dev/null +++ b/superset/assets/src/explore/controlPanels/extraOverrides.js @@ -0,0 +1,3 @@ +// For individual deployments to add custom overrides +export default { +}; From 77c8d199e1da09ecf5f91f44f4071a40b3fd43f2 Mon Sep 17 00:00:00 2001 From: Michelle Thomas Date: Wed, 27 Feb 2019 11:16:01 -0800 Subject: [PATCH 2/5] Updating extraOverrides to fit with more cases --- .../assets/src/explore/controlPanels/Line.js | 7 ++++-- .../assets/src/explore/controlPanels/Table.js | 7 +++++- .../explore/controlPanels/extraOverrides.js | 23 +++++++++++++++++-- 3 files changed, 32 insertions(+), 5 deletions(-) diff --git a/superset/assets/src/explore/controlPanels/Line.js b/superset/assets/src/explore/controlPanels/Line.js index 498c2e6ff056d..a94738e25d06b 100644 --- a/superset/assets/src/explore/controlPanels/Line.js +++ b/superset/assets/src/explore/controlPanels/Line.js @@ -21,7 +21,7 @@ import { NVD3TimeSeries, annotations } from './sections'; import { D3_TIME_FORMAT_OPTIONS } from '../controls'; import extraOverrides from './extraOverrides'; -export default { +const controlPanel = { requiresTime: true, controlPanelSections: [ NVD3TimeSeries[0], @@ -64,6 +64,9 @@ export default { row_limit: { default: 50000, }, - ...extraOverrides, }, }; + +controlPanel.controlOverrides = extraOverrides(controlPanel.controlOverrides); + +export default controlPanel; diff --git a/superset/assets/src/explore/controlPanels/Table.js b/superset/assets/src/explore/controlPanels/Table.js index 98f0f39a71230..badb0c188bd2b 100644 --- a/superset/assets/src/explore/controlPanels/Table.js +++ b/superset/assets/src/explore/controlPanels/Table.js @@ -17,8 +17,9 @@ * under the License. */ import { t } from '@superset-ui/translation'; +import extraOverrides from './extraOverrides'; -export default { +const controlPanel = { controlPanelSections: [ { label: t('GROUP BY'), @@ -66,3 +67,7 @@ export default { }, }, }; + +controlPanel.controlOverrides = extraOverrides(controlPanel.controlOverrides); + +export default controlPanel; diff --git a/superset/assets/src/explore/controlPanels/extraOverrides.js b/superset/assets/src/explore/controlPanels/extraOverrides.js index 1403a4aaacb33..f337b78f301c6 100644 --- a/superset/assets/src/explore/controlPanels/extraOverrides.js +++ b/superset/assets/src/explore/controlPanels/extraOverrides.js @@ -1,3 +1,22 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ // For individual deployments to add custom overrides -export default { -}; +export default function extraOverrides(controlOverrides) { + return controlOverrides; +} From aafb622ec47c041ad3582f2422ecb1aee677322f Mon Sep 17 00:00:00 2001 From: Michelle Thomas Date: Wed, 27 Feb 2019 17:14:38 -0800 Subject: [PATCH 3/5] Moving extraOverrides to index.js --- superset/assets/src/explore/controlPanels/Line.js | 7 +------ superset/assets/src/explore/controlPanels/Table.js | 7 +------ .../assets/src/explore/controlPanels/extraOverrides.js | 4 ++-- superset/assets/src/explore/controlPanels/index.js | 5 +++-- 4 files changed, 7 insertions(+), 16 deletions(-) diff --git a/superset/assets/src/explore/controlPanels/Line.js b/superset/assets/src/explore/controlPanels/Line.js index a94738e25d06b..012976a6ec1be 100644 --- a/superset/assets/src/explore/controlPanels/Line.js +++ b/superset/assets/src/explore/controlPanels/Line.js @@ -19,9 +19,8 @@ import { t } from '@superset-ui/translation'; import { NVD3TimeSeries, annotations } from './sections'; import { D3_TIME_FORMAT_OPTIONS } from '../controls'; -import extraOverrides from './extraOverrides'; -const controlPanel = { +export default { requiresTime: true, controlPanelSections: [ NVD3TimeSeries[0], @@ -66,7 +65,3 @@ const controlPanel = { }, }, }; - -controlPanel.controlOverrides = extraOverrides(controlPanel.controlOverrides); - -export default controlPanel; diff --git a/superset/assets/src/explore/controlPanels/Table.js b/superset/assets/src/explore/controlPanels/Table.js index badb0c188bd2b..98f0f39a71230 100644 --- a/superset/assets/src/explore/controlPanels/Table.js +++ b/superset/assets/src/explore/controlPanels/Table.js @@ -17,9 +17,8 @@ * under the License. */ import { t } from '@superset-ui/translation'; -import extraOverrides from './extraOverrides'; -const controlPanel = { +export default { controlPanelSections: [ { label: t('GROUP BY'), @@ -67,7 +66,3 @@ const controlPanel = { }, }, }; - -controlPanel.controlOverrides = extraOverrides(controlPanel.controlOverrides); - -export default controlPanel; diff --git a/superset/assets/src/explore/controlPanels/extraOverrides.js b/superset/assets/src/explore/controlPanels/extraOverrides.js index f337b78f301c6..c4b31829ff95c 100644 --- a/superset/assets/src/explore/controlPanels/extraOverrides.js +++ b/superset/assets/src/explore/controlPanels/extraOverrides.js @@ -17,6 +17,6 @@ * under the License. */ // For individual deployments to add custom overrides -export default function extraOverrides(controlOverrides) { - return controlOverrides; +export default function extraOverrides(controlPanelConfigs) { + return controlPanelConfigs; } diff --git a/superset/assets/src/explore/controlPanels/index.js b/superset/assets/src/explore/controlPanels/index.js index 7034e5157ff0e..221c5cf29b25f 100644 --- a/superset/assets/src/explore/controlPanels/index.js +++ b/superset/assets/src/explore/controlPanels/index.js @@ -22,6 +22,7 @@ */ import { isFeatureEnabled, FeatureFlag } from 'src/featureFlags'; import * as sections from './sections'; +import extraOverrides from './extraOverrides'; import Area from './Area'; import Bar from './Bar'; @@ -72,7 +73,7 @@ import DeckPolygon from './DeckPolygon'; import DeckScatter from './DeckScatter'; import DeckScreengrid from './DeckScreengrid'; -export const controlPanelConfigs = { +export const controlPanelConfigs = extraOverrides({ area: Area, bar: Bar, big_number: BigNumber, @@ -122,7 +123,7 @@ export const controlPanelConfigs = { deck_scatter: DeckScatter, deck_screengrid: DeckScreengrid, -}; +}); export default controlPanelConfigs; From 5dc3e8235efc1da5376917fe1402baef961b44ba Mon Sep 17 00:00:00 2001 From: Michelle Thomas Date: Fri, 1 Mar 2019 15:31:39 -0800 Subject: [PATCH 4/5] Removing webpack-merge in package.json --- superset/assets/package-lock.json | 9 --------- superset/assets/package.json | 1 - 2 files changed, 10 deletions(-) diff --git a/superset/assets/package-lock.json b/superset/assets/package-lock.json index 3240f1480dcff..9eae0292ecd16 100644 --- a/superset/assets/package-lock.json +++ b/superset/assets/package-lock.json @@ -21977,15 +21977,6 @@ "uuid": "^3.3.2" } }, - "webpack-merge": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.1.tgz", - "integrity": "sha512-4p8WQyS98bUJcCvFMbdGZyZmsKuWjWVnVHnAS3FFg0HDaRVrPbkivx2RYCre8UiemD67RsiFFLfn4JhLAin8Vw==", - "dev": true, - "requires": { - "lodash": "^4.17.5" - } - }, "webpack-sources": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.3.0.tgz", diff --git a/superset/assets/package.json b/superset/assets/package.json index 68f21c4d1bafc..d657698ba5d33 100644 --- a/superset/assets/package.json +++ b/superset/assets/package.json @@ -206,7 +206,6 @@ "typescript": "^3.1.3", "url-loader": "^1.0.1", "webpack": "^4.19.0", - "webpack-merge": "^4.2.1", "webpack-assets-manifest": "^3.0.1", "webpack-bundle-analyzer": "^3.0.2", "webpack-cli": "^3.1.1", From 1d01066acce6682e5ffaec43bd7d25a93e2ea447 Mon Sep 17 00:00:00 2001 From: Michelle Thomas Date: Tue, 5 Mar 2019 15:38:22 -0800 Subject: [PATCH 5/5] Fixing metrics control clearing metric --- .../components/controls/MetricsControl.jsx | 24 +++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/superset/assets/src/explore/components/controls/MetricsControl.jsx b/superset/assets/src/explore/components/controls/MetricsControl.jsx index 84c160b492f51..b42cc814d67b6 100644 --- a/superset/assets/src/explore/components/controls/MetricsControl.jsx +++ b/superset/assets/src/explore/components/controls/MetricsControl.jsx @@ -60,6 +60,21 @@ function isDictionaryForAdhocMetric(value) { return value && !(value instanceof AdhocMetric) && value.expressionType; } +function columnsContainAllMetrics(value, nextProps) { + const columnNames = new Set( + [...nextProps.columns, ...nextProps.savedMetrics] + // eslint-disable-next-line camelcase + .map(({ column_name, metric_name }) => (column_name || metric_name)), + ); + + return (Array.isArray(value) ? value : [value]) + .filter(metric => metric) + // find column names + .map(metric => metric.column ? metric.column.column_name : metric.column_name || metric) + .filter(name => name) + .every(name => columnNames.has(name)); +} + // adhoc metrics are stored as dictionaries in URL params. We convert them back into the // AdhocMetric class for typechecking, consistency and instance method access. function coerceAdhocMetrics(value) { @@ -135,17 +150,22 @@ export default class MetricsControl extends React.PureComponent { } componentWillReceiveProps(nextProps) { + const { value } = this.props; if ( !isEqual(this.props.columns, nextProps.columns) || !isEqual(this.props.savedMetrics, nextProps.savedMetrics) ) { + this.setState({ options: this.optionsForSelect(nextProps) }); + // Remove metrics if selected value no longer a column - if (nextProps.columns.indexOf(this.state.value) >= 0) { + const containsAllMetrics = columnsContainAllMetrics(value, nextProps); + + if (!containsAllMetrics) { this.props.onChange([]); } } - if (this.props.value !== nextProps.value) { + if (value !== nextProps.value) { this.setState({ value: coerceAdhocMetrics(nextProps.value) }); } }