Skip to content

Commit 32b6fec

Browse files
authored
Merge pull request #6655 from plotly/fix-multi-legend-isolate
Fix double clicking one item in a legend hides traces in other legends
2 parents ab5e16a + 988da2a commit 32b6fec

File tree

3 files changed

+60
-2
lines changed

3 files changed

+60
-2
lines changed

Diff for: draftlogs/6655_fix.md

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
- Fix double clicking one item in a legend hides traces in other legends [[#6655](https://github.com/plotly/plotly.js/pull/6655)]

Diff for: src/components/legend/handle_click.js

+3-2
Original file line numberDiff line numberDiff line change
@@ -183,9 +183,10 @@ module.exports = function handleClick(g, gd, numClicks) {
183183
}
184184
}
185185

186+
var thisLegend = fullTrace.legend;
186187
for(i = 0; i < fullData.length; i++) {
187-
// False is sticky; we don't change it.
188-
if(fullData[i].visible === false) continue;
188+
// False is sticky; we don't change it. Also ensure we don't change states of itmes in other legend
189+
if(fullData[i].visible === false || fullData[i].legend !== thisLegend) continue;
189190

190191
if(Registry.traceIs(fullData[i], 'notLegendIsolatable')) {
191192
continue;

Diff for: test/jasmine/tests/legend_test.js

+56
Original file line numberDiff line numberDiff line change
@@ -1782,6 +1782,62 @@ describe('legend interaction', function() {
17821782
});
17831783
});
17841784

1785+
describe('traces in different legends', function() {
1786+
beforeEach(function(done) {
1787+
Plotly.newPlot(gd, [
1788+
{x: [1, 2], y: [0, 1], visible: false},
1789+
{x: [1, 2], y: [1, 2], visible: 'legendonly'},
1790+
{x: [1, 2], y: [2, 3]},
1791+
{x: [1, 2], y: [0, 1], yaxis: 'y2', legend: 'legend2', visible: false},
1792+
{x: [1, 2], y: [1, 2], yaxis: 'y2', legend: 'legend2', visible: 'legendonly'},
1793+
{x: [1, 2], y: [2, 3], yaxis: 'y2', legend: 'legend2'}
1794+
], {
1795+
yaxis: {
1796+
domain: [0.55, 1]
1797+
},
1798+
yaxis2: {
1799+
anchor: 'x',
1800+
domain: [0, 0.45]
1801+
},
1802+
legend2: {
1803+
y: 0.5
1804+
}
1805+
}).then(done);
1806+
});
1807+
1808+
it('clicking once toggles legendonly -> true', function(done) {
1809+
Promise.resolve()
1810+
.then(assertVisible([false, 'legendonly', true, false, 'legendonly', true]))
1811+
.then(click(0))
1812+
.then(assertVisible([false, true, true, false, 'legendonly', true]))
1813+
.then(done, done.fail);
1814+
});
1815+
1816+
it('clicking once toggles true -> legendonly', function(done) {
1817+
Promise.resolve()
1818+
.then(assertVisible([false, 'legendonly', true, false, 'legendonly', true]))
1819+
.then(click(1))
1820+
.then(assertVisible([false, 'legendonly', 'legendonly', false, 'legendonly', true]))
1821+
.then(done, done.fail);
1822+
});
1823+
1824+
it('double-clicking isolates a visible trace ', function(done) {
1825+
Promise.resolve()
1826+
.then(click(0))
1827+
.then(assertVisible([false, true, true, false, 'legendonly', true]))
1828+
.then(click(0, 2))
1829+
.then(assertVisible([false, true, 'legendonly', false, 'legendonly', true]))
1830+
.then(done, done.fail);
1831+
});
1832+
1833+
it('double-clicking an isolated trace shows all non-hidden traces', function(done) {
1834+
Promise.resolve()
1835+
.then(click(0, 2))
1836+
.then(assertVisible([false, true, true, false, 'legendonly', true]))
1837+
.then(done, done.fail);
1838+
});
1839+
});
1840+
17851841
describe('legendgroup visibility', function() {
17861842
beforeEach(function(done) {
17871843
Plotly.newPlot(gd, [{

0 commit comments

Comments
 (0)