From 14a25788adbd9a4f7aeae2e1d284728126f2c023 Mon Sep 17 00:00:00 2001
From: Aleksandr Lesnenko <alxnddr@users.noreply.github.com>
Date: Fri, 22 Jul 2022 14:34:00 +0400
Subject: [PATCH] fix incorrect value is used for the bubble size domain
 (#24099)

* fix incorrect value is used for the bubble size domain

* rename

* fix typo
---
 .../visualizations/lib/LineAreaBarRenderer.js | 21 +++++++++++++------
 1 file changed, 15 insertions(+), 6 deletions(-)

diff --git a/frontend/src/metabase/visualizations/lib/LineAreaBarRenderer.js b/frontend/src/metabase/visualizations/lib/LineAreaBarRenderer.js
index a3223ac5a0c..a6dd9d31754 100644
--- a/frontend/src/metabase/visualizations/lib/LineAreaBarRenderer.js
+++ b/frontend/src/metabase/visualizations/lib/LineAreaBarRenderer.js
@@ -444,20 +444,29 @@ function applyChartLineBarSettings(
   }
 }
 
-// TODO - give this a good name when I figure out what it does
-function doScatterChartStuff(chart, datas, index, { yExtent, yExtents }) {
+const BUBBLE_SIZE_INDEX = 2;
+
+const getBubbleSizeMaxDomain = (datas, seriesIndex) => {
+  const seriesData = datas[seriesIndex];
+  const sizeValues = seriesData.map(data => data[BUBBLE_SIZE_INDEX]);
+  return d3.max(sizeValues);
+};
+
+function configureScatterChart(chart, datas, index) {
   chart.keyAccessor(d => d.key[0]).valueAccessor(d => d.key[1]);
 
   if (chart.radiusValueAccessor) {
-    const isBubble = datas[index][0].length > 2;
-    if (isBubble) {
+    const hasBubbleRadiusValues = datas[index][0].length > BUBBLE_SIZE_INDEX;
+    const bubbleSizeMaxDomain = getBubbleSizeMaxDomain(datas, index);
+
+    if (hasBubbleRadiusValues) {
       const BUBBLE_SCALE_FACTOR_MAX = 64;
       chart
         .radiusValueAccessor(d => d.key[2])
         .r(
           d3.scale
             .sqrt()
-            .domain([0, yExtent[1] * BUBBLE_SCALE_FACTOR_MAX])
+            .domain([0, bubbleSizeMaxDomain * BUBBLE_SCALE_FACTOR_MAX])
             .range([0, 1]),
         );
     } else {
@@ -576,7 +585,7 @@ function getCharts(
       .useRightYAxis(yAxisSplit.length > 1 && yAxisSplit[1].includes(index));
 
     if (chartType === "scatter") {
-      doScatterChartStuff(chart, datas, index, yAxisProps);
+      configureScatterChart(chart, datas, index, yAxisProps);
     }
 
     if (chart.defined) {
-- 
GitLab