Skip to content

Commit

Permalink
Fix interaction on partially visible bar (#9446)
Browse files Browse the repository at this point in the history
  • Loading branch information
kurkle authored Jul 20, 2021
1 parent c73add9 commit ba2f158
Show file tree
Hide file tree
Showing 6 changed files with 90 additions and 4 deletions.
2 changes: 1 addition & 1 deletion src/core/core.interaction.js
Original file line number Diff line number Diff line change
Expand Up @@ -166,7 +166,7 @@ function getNearestItems(chart, position, axis, intersect, useFinalPosition) {
}

const center = element.getCenterPoint(useFinalPosition);
if (!_isPointInArea(center, chart.chartArea, chart._minPadding)) {
if (!_isPointInArea(center, chart.chartArea, chart._minPadding) && !element.inRange(position.x, position.y, useFinalPosition)) {
return;
}
const distance = distanceMetric(position, center);
Expand Down
42 changes: 42 additions & 0 deletions test/fixtures/core.interaction/nearest-partial-bar.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
module.exports = {
config: {
type: 'bar',
data: {
labels: ['a', 'b', 'c'],
datasets: [
{
data: [220, 250, 225],
},
],
},
options: {
events: ['click'],
interaction: {
mode: 'nearest'
},
plugins: {
tooltip: true,
legend: false
},
scales: {
y: {
beginAtZero: false
}
}
}
},
options: {
spriteText: true,
canvas: {
width: 256,
height: 256
},
async run(chart) {
const point = {
x: chart.chartArea.left + chart.chartArea.width / 2,
y: chart.chartArea.top + chart.chartArea.height / 2,
};
await jasmine.triggerMouseEvent(chart, 'click', point);
}
}
};
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
45 changes: 45 additions & 0 deletions test/fixtures/core.interaction/nearest-point-behind-scale.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
module.exports = {
config: {
type: 'scatter',
data: {
datasets: [{
data: [{x: 1, y: 1}, {x: 48, y: 1}]
}]
},
options: {
events: ['click'],
interaction: {
mode: 'nearest',
intersect: false
},
plugins: {
tooltip: true,
legend: false
},
scales: {
x: {
min: 5,
max: 50
},
y: {
min: 0,
max: 2
}
},
layout: {
padding: 50
}
}
},
options: {
spriteText: true,
canvas: {
width: 256,
height: 256
},
async run(chart) {
const point = chart.getDatasetMeta(0).data[0];
await jasmine.triggerMouseEvent(chart, 'click', {y: point.y, x: chart.chartArea.left});
}
}
};
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
5 changes: 2 additions & 3 deletions test/specs/core.interaction.tests.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
// Tests of the interaction handlers in Core.Interaction

// Test the rectangle element
describe('Core.Interaction', function() {
describe('auto', jasmine.fixture.specs('core.interaction'));

describe('point mode', function() {
beforeEach(function() {
this.chart = window.acquireChart({
Expand Down

0 comments on commit ba2f158

Please sign in to comment.