diff --git a/src/core/core.controller.js b/src/core/core.controller.js index 81aaa9ceba1..079c12d02ee 100644 --- a/src/core/core.controller.js +++ b/src/core/core.controller.js @@ -919,10 +919,6 @@ class Chart { if (mode === 'dataset') { meta = this.getDatasetMeta(items[0].datasetIndex); meta.controller['_' + prefix + 'DatasetHoverStyle'](); - for (i = 0, ilen = meta.data.length; i < ilen; ++i) { - meta.controller[prefix + 'HoverStyle'](meta.data[i], items[0].datasetIndex, i); - } - return; } for (i = 0, ilen = items.length; i < ilen; ++i) { diff --git a/src/core/core.interaction.js b/src/core/core.interaction.js index 3afce48fccc..3e130e02fd6 100644 --- a/src/core/core.interaction.js +++ b/src/core/core.interaction.js @@ -228,7 +228,12 @@ export default { let items = options.intersect ? getIntersectItems(chart, position, axis) : getNearestItems(chart, position, axis); if (items.length > 0) { - items = [{datasetIndex: items[0].datasetIndex}]; // when mode: 'dataset' we only need to return datasetIndex + const datasetIndex = items[0].datasetIndex; + const data = chart.getDatasetMeta(datasetIndex).data; + items = []; + for (let i = 0; i < data.length; ++i) { + items.push({element: data[i], datasetIndex, index: i}); + } } return items; diff --git a/test/specs/core.interaction.tests.js b/test/specs/core.interaction.tests.js index ea892c8176e..6f8dc2269c5 100644 --- a/test/specs/core.interaction.tests.js +++ b/test/specs/core.interaction.tests.js @@ -227,8 +227,8 @@ describe('Core.Interaction', function() { y: point.y }; - var elements = Chart.Interaction.modes.dataset(chart, evt, {intersect: true}); - expect(elements).toEqual([{datasetIndex: 0}]); + var elements = Chart.Interaction.modes.dataset(chart, evt, {intersect: true}).map(item => item.element); + expect(elements).toEqual(meta.data); }); it ('should return an empty array if nothing found', function() { @@ -283,8 +283,8 @@ describe('Core.Interaction', function() { y: chart.chartArea.top }; - var elements = Chart.Interaction.modes.dataset(chart, evt, {axis: 'x', intersect: false}); - expect(elements).toEqual([{datasetIndex: 0}]); + var elements = Chart.Interaction.modes.dataset(chart, evt, {axis: 'x', intersect: false}).map(item => item.element); + expect(elements).toEqual(chart.getDatasetMeta(0).data); }); it ('axis: y gets correct items', function() { @@ -297,8 +297,8 @@ describe('Core.Interaction', function() { y: chart.chartArea.top }; - var elements = Chart.Interaction.modes.dataset(chart, evt, {axis: 'y', intersect: false}); - expect(elements).toEqual([{datasetIndex: 1}]); + var elements = Chart.Interaction.modes.dataset(chart, evt, {axis: 'y', intersect: false}).map(item => item.element); + expect(elements).toEqual(chart.getDatasetMeta(1).data); }); it ('axis: xy gets correct items', function() { @@ -311,8 +311,8 @@ describe('Core.Interaction', function() { y: chart.chartArea.top }; - var elements = Chart.Interaction.modes.dataset(chart, evt, {intersect: false}); - expect(elements).toEqual([{datasetIndex: 1}]); + var elements = Chart.Interaction.modes.dataset(chart, evt, {intersect: false}).map(item => item.element); + expect(elements).toEqual(chart.getDatasetMeta(1).data); }); }); });