From fd1110860972ddd19044c3f49614dcd68472495d Mon Sep 17 00:00:00 2001 From: Mojtaba Samimi Date: Wed, 2 Aug 2023 09:21:48 -0400 Subject: [PATCH] do not return with empty legend items to clear old legends --- src/components/legend/draw.js | 2 +- test/jasmine/tests/legend_test.js | 30 ++++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/src/components/legend/draw.js b/src/components/legend/draw.js index 7d7faa25a21..629b30cad2d 100644 --- a/src/components/legend/draw.js +++ b/src/components/legend/draw.js @@ -113,7 +113,7 @@ function drawOne(gd, opts) { calcdata.push([{ trace: shapeLegend }]); } - if(!calcdata.length) return; + legendData = fullLayout.showlegend && getLegendData(calcdata, legendObj, fullLayout._legends.length > 1); } else { if(!legendObj.entries) return; diff --git a/test/jasmine/tests/legend_test.js b/test/jasmine/tests/legend_test.js index 9723dd52961..3dd140ffe95 100644 --- a/test/jasmine/tests/legend_test.js +++ b/test/jasmine/tests/legend_test.js @@ -1204,6 +1204,36 @@ describe('legend relayout update', function() { .then(done, done.fail); }); + it('should clear an empty legend & add legend using react', function(done) { + var fig1 = { + data: [{y: [1, 2]}], + layout: {showlegend: true} + }; + + var fig2 = { + data: [], + layout: {showlegend: true} + }; + + Plotly.newPlot(gd, fig1) + .then(function() { + expect(d3SelectAll('.legend')[0].length).toBe(1); + }) + .then(function() { + return Plotly.react(gd, fig2); + }) + .then(function() { + expect(d3SelectAll('.legend')[0].length).toBe(0); + }) + .then(function() { + return Plotly.react(gd, fig1); + }) + .then(function() { + expect(d3SelectAll('.legend')[0].length).toBe(1); + }) + .then(done, done.fail); + }); + it('should be able to add & clear multiple legends using react', function(done) { var fig1 = { data: [{