From 0e16ab84097eb11c1133e1b7dcda885d5d8e6ced Mon Sep 17 00:00:00 2001 From: Tom Robinson <tlrobinson@gmail.com> Date: Tue, 9 May 2017 13:56:03 -0700 Subject: [PATCH] Fix multi scalar drill through --- .../components/LineAreaBarChart.jsx | 2 ++ .../components/Visualization.jsx | 26 +++++++++---------- .../visualizations/lib/LineAreaBarRenderer.js | 10 +++---- .../visualizations/visualizations/Scalar.jsx | 5 ++-- 4 files changed, 23 insertions(+), 20 deletions(-) diff --git a/frontend/src/metabase/visualizations/components/LineAreaBarChart.jsx b/frontend/src/metabase/visualizations/components/LineAreaBarChart.jsx index ba39b956cc4..17a6b75f3aa 100644 --- a/frontend/src/metabase/visualizations/components/LineAreaBarChart.jsx +++ b/frontend/src/metabase/visualizations/components/LineAreaBarChart.jsx @@ -308,6 +308,7 @@ function transformSingleSeries(s, series, seriesIndex) { cols: rowColumnIndexes.map(i => cols[i]), _rawCols: cols }, + // for when the legend header for the breakout is clicked clicked: { dimensions: [{ value: breakoutValue, @@ -330,6 +331,7 @@ function transformSingleSeries(s, series, seriesIndex) { metricColumnIndexes.length > 1 && getFriendlyName(col) ].filter(n => n).join(": "), _transformed: true, + _seriesIndex: seriesIndex, }, data: { rows: rows.map((row, rowIndex) => { diff --git a/frontend/src/metabase/visualizations/components/Visualization.jsx b/frontend/src/metabase/visualizations/components/Visualization.jsx index 0891714986a..18f7d75f9c7 100644 --- a/frontend/src/metabase/visualizations/components/Visualization.jsx +++ b/frontend/src/metabase/visualizations/components/Visualization.jsx @@ -226,22 +226,22 @@ export default class Visualization extends Component<*, Props, State> { handleOnChangeCardAndRun = (card: UnsavedCard) => { const { series, clicked } = this.state; - // If the current card is saved or is based on a saved question, - // carry that information to the new card for showing lineage const index = (clicked && clicked.seriesIndex) || 0; - // $FlowFixMe - const hasOriginalCard = series[index] && series[index].card && (series[index].card.id || series[index].card.original_card_id); - if (hasOriginalCard) { - const cardWithOriginalId: UnsavedCard = { - ...card, - // $FlowFixMe - original_card_id: series[index].card.id || series[index].card.original_card_id - }; + const originalCard = series && series[index] && series[index].card; - this.props.onChangeCardAndRun(cardWithOriginalId) - } else { - this.props.onChangeCardAndRun(card) + let cardId = card.id || card.original_card_id; + // if the supplied card doesn't have an id, get it from the original card + if (cardId == null && originalCard) { + // $FlowFixMe + cardId = originalCard.id || originalCard.original_card_id; } + + this.props.onChangeCardAndRun({ + ...card, + id: cardId, + // $FlowFixMe + original_card_id: cardId + }); } onRender = ({ yAxisSplit, warnings = [] } = {}) => { diff --git a/frontend/src/metabase/visualizations/lib/LineAreaBarRenderer.js b/frontend/src/metabase/visualizations/lib/LineAreaBarRenderer.js index f5d49773251..0752437e658 100644 --- a/frontend/src/metabase/visualizations/lib/LineAreaBarRenderer.js +++ b/frontend/src/metabase/visualizations/lib/LineAreaBarRenderer.js @@ -434,11 +434,11 @@ function applyChartTooltips(chart, series, isStacked, isScalarSeries, onHoverCha column: card._breakoutColumn }); } - // series was not transformed - else if (!series._raw) { - // $FlowFixMe - clicked.seriesIndex = seriesIndex; - } + } + + if (card._seriesIndex != null) { + // $FlowFixMe + clicked.seriesIndex = card._seriesIndex; } if (clicked) { diff --git a/frontend/src/metabase/visualizations/visualizations/Scalar.jsx b/frontend/src/metabase/visualizations/visualizations/Scalar.jsx index c3b09b1bd7e..a973509d374 100644 --- a/frontend/src/metabase/visualizations/visualizations/Scalar.jsx +++ b/frontend/src/metabase/visualizations/visualizations/Scalar.jsx @@ -45,14 +45,15 @@ export default class Scalar extends Component<*, VisualizationProps, *> { static transformSeries(series) { if (series.length > 1) { - return series.map(s => ({ + return series.map((s, seriesIndex) => ({ card: { ...s.card, display: "funnel", visualization_settings: { ...s.card.visualization_settings, "graph.x_axis.labels_enabled": false - } + }, + _seriesIndex: seriesIndex, }, data: { cols: [ -- GitLab