From 40e38098da26035ffe24d9c6d4cfee6a5111227f Mon Sep 17 00:00:00 2001
From: Tom Robinson <tlrobinson@gmail.com>
Date: Wed, 12 Oct 2016 13:26:36 -0700
Subject: [PATCH] Fix multiseries titles showing column names instead of card
 name. Resolves #3545

---
 .../components/LineAreaBarChart.jsx           | 19 +++++++++++++++----
 .../components/Visualization.spec.js          |  8 ++++----
 2 files changed, 19 insertions(+), 8 deletions(-)

diff --git a/frontend/src/metabase/visualizations/components/LineAreaBarChart.jsx b/frontend/src/metabase/visualizations/components/LineAreaBarChart.jsx
index c527b34e678..46e8b76703f 100644
--- a/frontend/src/metabase/visualizations/components/LineAreaBarChart.jsx
+++ b/frontend/src/metabase/visualizations/components/LineAreaBarChart.jsx
@@ -71,7 +71,7 @@ export default class LineAreaBarChart extends Component {
     }
 
     static transformSeries(series) {
-        let newSeries = [].concat(...series.map(transformSingleSeries));
+        let newSeries = [].concat(...series.map((s) => transformSingleSeries(s, series)));
         if (_.isEqual(series, newSeries) || newSeries.length === 0) {
             return series;
         } else {
@@ -214,7 +214,7 @@ function getColumnsFromNames(cols, names) {
     return names.map(name => _.findWhere(cols, { name }));
 }
 
-function transformSingleSeries(s) {
+function transformSingleSeries(s, series) {
     const { card, data } = s;
 
     // HACK: prevents cards from being transformed too many times
@@ -248,7 +248,13 @@ function transformSingleSeries(s) {
         ).all().map(o => ({
             card: {
                 ...card,
-                name: o.key,
+                // if multiseries include the card title as well as the breakout value
+                name: [
+                    // show series title if it's multiseries
+                    series.length > 1 && card.name,
+                    // always show grouping value
+                    o.key
+                ].filter(n => n).join(": "),
                 _transformed: true,
             },
             data: {
@@ -264,7 +270,12 @@ function transformSingleSeries(s) {
             return {
                 card: {
                     ...card,
-                    name: getFriendlyName(col),
+                    name: [
+                        // show series title if it's multiseries
+                        series.length > 1 && card.name,
+                        // show column name if there are multiple metrics
+                        metricIndexes.length > 1 && getFriendlyName(col)
+                    ].filter(n => n).join(": "),
                     _transformed: true,
                 },
                 data: {
diff --git a/frontend/test/unit/visualizations/components/Visualization.spec.js b/frontend/test/unit/visualizations/components/Visualization.spec.js
index 6d9e10fc4cd..402e6cb8f2e 100644
--- a/frontend/test/unit/visualizations/components/Visualization.spec.js
+++ b/frontend/test/unit/visualizations/components/Visualization.spec.js
@@ -83,7 +83,7 @@ describe("Visualization", () => {
             it("should render dashboard multiseries titles", () => {
                 let viz = renderVisualization({ series: [LineCard("Foo"), LineCard("Bar")], isDashboard: true });
                 expect(getTitles(viz)).toEqual([
-                    ["Foo_col1", "Bar_col1"]
+                    ["Foo_name", "Bar_name"]
                 ]);
             });
             it("should render dashboard multiseries titles and chart setting title", () => {
@@ -93,13 +93,13 @@ describe("Visualization", () => {
                 ], isDashboard: true });
                 expect(getTitles(viz)).toEqual([
                     ["Foo_title"],
-                    ["Foo_col1", "Bar_col1"]
+                    ["Foo_name", "Bar_name"]
                 ]);
             });
-            it("should render multiple breakout multiseries titles", () => {
+            it("should render multiple breakout multiseries titles (with both card titles and breakout values)", () => {
                 let viz = renderVisualization({ series: [MultiseriesLineCard("Foo"), MultiseriesLineCard("Bar")], isDashboard: true });
                 expect(getTitles(viz)).toEqual([
-                    ["Foo_cat1", "Foo_cat2", "Bar_cat1", "Bar_cat2"]
+                    ["Foo_name: Foo_cat1", "Foo_name: Foo_cat2", "Bar_name: Bar_cat1", "Bar_name: Bar_cat2"]
                 ]);
             });
         });
-- 
GitLab