Skip to content

Commit

Permalink
Trigger legend onLeave when the mouse leaves the canvas (#10301)
Browse files Browse the repository at this point in the history
  • Loading branch information
etimberg committed Apr 15, 2022
1 parent 5c3dc93 commit 54dcd6a
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 2 deletions.
4 changes: 2 additions & 2 deletions src/plugins/plugin.legend.js
Expand Up @@ -524,7 +524,7 @@ export class Legend extends Element {
// Chart event already has relative position in it
const hoveredItem = this._getLegendItemAt(e.x, e.y);

if (e.type === 'mousemove') {
if (e.type === 'mousemove' || e.type === 'mouseout') {
const previous = this._hoveredItem;
const sameItem = itemsEqual(previous, hoveredItem);
if (previous && !sameItem) {
Expand All @@ -543,7 +543,7 @@ export class Legend extends Element {
}

function isListened(type, opts) {
if (type === 'mousemove' && (opts.onHover || opts.onLeave)) {
if ((type === 'mousemove' || type === 'mouseout') && (opts.onHover || opts.onLeave)) {
return true;
}
if (opts.onClick && (type === 'click' || type === 'mouseup')) {
Expand Down
40 changes: 40 additions & 0 deletions test/specs/plugin.legend.tests.js
Expand Up @@ -997,6 +997,46 @@ describe('Legend block tests', function() {
expect(leaveItem).toBe(chart.legend.legendItems[0]);
});

it('should call onLeave when the mouse leaves the canvas', async function() {
var hoverItem = null;
var leaveItem = null;

var chart = acquireChart({
type: 'line',
data: {
labels: ['A', 'B', 'C', 'D'],
datasets: [{
data: [10, 20, 30, 100]
}]
},
options: {
plugins: {
legend: {
onHover: function(_, item) {
hoverItem = item;
},
onLeave: function(_, item) {
leaveItem = item;
}
}
}
}
});

var hb = chart.legend.legendHitBoxes[0];
var el = {
x: hb.left + (hb.width / 2),
y: hb.top + (hb.height / 2)
};

await jasmine.triggerMouseEvent(chart, 'mousemove', el);
expect(hoverItem).toBe(chart.legend.legendItems[0]);

await jasmine.triggerMouseEvent(chart, 'mouseout');
expect(leaveItem).toBe(chart.legend.legendItems[0]);
});


it('should call onClick for the correct item when in RTL mode', async function() {
var clickItem = null;

Expand Down

0 comments on commit 54dcd6a

Please sign in to comment.