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