feat: highlight nearest in chart on hover (#2184)

Co-authored-by: palashgdev <palashgdev@gmail.com>
This commit is contained in:
volodfast 2023-02-07 13:25:33 +02:00 committed by GitHub
parent 2a20b6fc86
commit 8a5b26cefe
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -81,6 +81,7 @@ function Graph({
onDragSelect, onDragSelect,
dragSelectColor, dragSelectColor,
}: GraphProps): JSX.Element { }: GraphProps): JSX.Element {
const nearestDatasetIndex = useRef<null | number>(null);
const chartRef = useRef<HTMLCanvasElement>(null); const chartRef = useRef<HTMLCanvasElement>(null);
const isDarkMode = useIsDarkMode(); const isDarkMode = useIsDarkMode();
@ -164,8 +165,16 @@ function Graph({
if (context.parsed.y !== null) { if (context.parsed.y !== null) {
label += getToolTipValue(context.parsed.y.toString(), yAxisUnit); label += getToolTipValue(context.parsed.y.toString(), yAxisUnit);
} }
return label; return label;
}, },
labelTextColor(labelData) {
if (labelData.datasetIndex === nearestDatasetIndex.current) {
return 'rgba(255, 255, 255, 1)';
}
return 'rgba(255, 255, 255, 0.75)';
},
}, },
}, },
[dragSelectPluginId]: createDragSelectPluginOptions( [dragSelectPluginId]: createDragSelectPluginOptions(
@ -237,6 +246,22 @@ function Graph({
onClickHandler(event, element, chart, data); onClickHandler(event, element, chart, data);
} }
}, },
onHover: (event, _, chart) => {
if (event.native) {
const interactions = chart.getElementsAtEventForMode(
event.native,
'nearest',
{
intersect: false,
},
true,
);
if (interactions[0]) {
nearestDatasetIndex.current = interactions[0].datasetIndex;
}
}
},
}; };
const chartHasData = hasData(data); const chartHasData = hasData(data);