@@ -53,6 +53,17 @@ export const getComparisonData = (data1, data2, mode) => {
5353 } ) ;
5454} ;
5555
56+ export const getActiveElementsAtStep = ( datasets , step ) => {
57+ const activeElements = [ ] ;
58+ datasets . forEach ( ( dataset , datasetIndex ) => {
59+ const index = dataset . data . findIndex ( p => p . x === step ) ;
60+ if ( index !== - 1 ) {
61+ activeElements . push ( { datasetIndex, index } ) ;
62+ }
63+ } ) ;
64+ return activeElements ;
65+ } ;
66+
5667const ChartWrapper = ( { data, options, chartId, onRegisterChart, onSyncHover } ) => {
5768 const chartRef = useRef ( null ) ;
5869
@@ -66,8 +77,10 @@ const ChartWrapper = ({ data, options, chartId, onRegisterChart, onSyncHover })
6677 const enhancedOptions = {
6778 ...options ,
6879 onHover : ( event , activeElements ) => {
69- if ( activeElements . length > 0 ) {
70- const step = activeElements [ 0 ] . index ;
80+ if ( activeElements . length > 0 && chartRef . current ) {
81+ const { datasetIndex, index } = activeElements [ 0 ] ;
82+ const point = chartRef . current . data ?. datasets ?. [ datasetIndex ] ?. data ?. [ index ] ;
83+ const step = typeof point ?. x === 'number' ? point . x : index ;
7184 onSyncHover ( step , chartId ) ;
7285 } else {
7386 onSyncHover ( null , chartId ) ;
@@ -112,12 +125,7 @@ export default function ChartContainer({
112125 chart . tooltip . setActiveElements ( [ ] ) ;
113126 chart . update ( 'none' ) ;
114127 } else if ( id !== sourceId ) {
115- const activeElements = [ ] ;
116- chart . data . datasets . forEach ( ( dataset , datasetIndex ) => {
117- if ( dataset . data && dataset . data . length > step ) {
118- activeElements . push ( { datasetIndex, index : step } ) ;
119- }
120- } ) ;
128+ const activeElements = getActiveElementsAtStep ( chart . data . datasets , step ) ;
121129 chart . setActiveElements ( activeElements ) ;
122130 chart . tooltip . setActiveElements ( activeElements , { x : 0 , y : 0 } ) ;
123131 chart . update ( 'none' ) ;
0 commit comments