From ef32d4a5b4aa61b2ed51e5893e65bad920d5809c Mon Sep 17 00:00:00 2001 From: Paul Rosenzweig <paulrosenzweig@users.noreply.github.com> Date: Fri, 14 Jun 2019 17:40:44 -0400 Subject: [PATCH] fix truncated histogram bars (#10133) --- .../visualizations/lib/LineAreaBarRenderer.js | 17 ++++++++---- .../LineAreaBarRenderer.unit.spec.js | 26 +++++++++++++++++++ 2 files changed, 38 insertions(+), 5 deletions(-) diff --git a/frontend/src/metabase/visualizations/lib/LineAreaBarRenderer.js b/frontend/src/metabase/visualizations/lib/LineAreaBarRenderer.js index a72b1bcd0dc..16606938098 100644 --- a/frontend/src/metabase/visualizations/lib/LineAreaBarRenderer.js +++ b/frontend/src/metabase/visualizations/lib/LineAreaBarRenderer.js @@ -138,13 +138,20 @@ function getXInterval({ settings, series }, xValues) { } function getXAxisProps(props, datas) { - const xValues = getXValues(datas); - + const rawXValues = getXValues(datas); + const isHistogram = isHistogramBar(props); + const xInterval = getXInterval(props, rawXValues); + + // For histograms we add a fake x value one xInterval to the right + // This compensates for the barshifting we do align ticks + const xValues = isHistogram + ? [...rawXValues, Math.max(...rawXValues) + xInterval] + : rawXValues; return { - xValues, + isHistogramBar: isHistogram, xDomain: d3.extent(xValues), - xInterval: getXInterval(props, xValues), - isHistogramBar: isHistogramBar(props), + xInterval, + xValues, }; } diff --git a/frontend/test/metabase/visualizations/components/LineAreaBarRenderer.unit.spec.js b/frontend/test/metabase/visualizations/components/LineAreaBarRenderer.unit.spec.js index b5c8dbd1aa3..4b038d9a76b 100644 --- a/frontend/test/metabase/visualizations/components/LineAreaBarRenderer.unit.spec.js +++ b/frontend/test/metabase/visualizations/components/LineAreaBarRenderer.unit.spec.js @@ -239,6 +239,32 @@ describe("LineAreaBarRenderer", () => { }); }); + describe("histogram", () => { + it("should have one more tick than it has bars", () => { + // this is because each bar has a tick on either side + renderLineAreaBar( + element, + [ + { + data: { + cols: [NumberColumn(), NumberColumn()], + rows: [[1, 1], [2, 2], [3, 1]], + }, + card: { + display: "bar", + visualization_settings: { + "graph.x_axis.axis_enabled": true, + "graph.x_axis.scale": "histogram", + }, + }, + }, + ], + {}, + ); + expect(qsa(".axis.x .tick").length).toBe(4); + }); + }); + // querySelector shortcut const qs = selector => element.querySelector(selector); -- GitLab