fix: guard crosshair move handler against re-entrant recursion from applyOptions

This commit is contained in:
Marko Djordjevic 2026-02-17 19:44:37 +01:00
parent 0ba3592679
commit 148fe22cd7

View file

@ -976,7 +976,9 @@ const CandleChart = forwardRef<CandleChartHandle, CandleChartProps>(
if (!drawingState && !dragState) return;
if (drawingState && !previewPrimitiveRef.current) return;
let isUpdating = false;
const handleCrosshairMove = (param: any) => {
if (isUpdating) return;
if (!param.point) return;
const time = chartRef.current!.timeScale().coordinateToTime(param.point.x);
@ -986,6 +988,8 @@ const CandleChart = forwardRef<CandleChartHandle, CandleChartProps>(
const currentPoint = { time, price };
isUpdating = true;
try {
// Update preview primitive endpoint during drawing
if (drawingState && previewPrimitiveRef.current) {
if (previewPrimitiveRef.current instanceof TrendLine) {
@ -1017,6 +1021,9 @@ const CandleChart = forwardRef<CandleChartHandle, CandleChartProps>(
seriesRef.current!.applyOptions({});
}
}
} finally {
isUpdating = false;
}
};
chartRef.current.subscribeCrosshairMove(handleCrosshairMove);