fix(dashboard): guard customTooltip plugin against undefined tooltip and missing Y scale
chart.tooltip is undefined during initial draw for radial chart types (doughnut/pie), and chart.scales.y doesn't exist on non-cartesian charts. This crashed chart creation, causing 'Failed to load' messages on all pages.
This commit is contained in:
@@ -26,27 +26,29 @@ class ChartManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
registerPlugins() {
|
registerPlugins() {
|
||||||
// Register a plugin for tooltip background
|
// Register a plugin that draws a vertical dashed line at the active tooltip point.
|
||||||
|
// Only applies to charts with a cartesian Y scale (line, bar) — skip radial types.
|
||||||
Chart.register({
|
Chart.register({
|
||||||
id: 'customTooltip',
|
id: 'customTooltip',
|
||||||
beforeDraw: (chart) => {
|
beforeDraw: (chart) => {
|
||||||
if (chart.tooltip._active && chart.tooltip._active.length) {
|
if (!chart.tooltip || !chart.tooltip._active || !chart.tooltip._active.length) return;
|
||||||
const ctx = chart.ctx;
|
if (!chart.scales.y) return; // no cartesian Y axis (pie/doughnut)
|
||||||
const activePoint = chart.tooltip._active[0];
|
|
||||||
const x = activePoint.element.x;
|
|
||||||
const topY = chart.scales.y.top;
|
|
||||||
const bottomY = chart.scales.y.bottom;
|
|
||||||
|
|
||||||
ctx.save();
|
const ctx = chart.ctx;
|
||||||
ctx.beginPath();
|
const activePoint = chart.tooltip._active[0];
|
||||||
ctx.setLineDash([5, 5]);
|
const x = activePoint.element.x;
|
||||||
ctx.moveTo(x, topY);
|
const topY = chart.scales.y.top;
|
||||||
ctx.lineTo(x, bottomY);
|
const bottomY = chart.scales.y.bottom;
|
||||||
ctx.lineWidth = 1;
|
|
||||||
ctx.strokeStyle = '#665c54'; // bg3
|
ctx.save();
|
||||||
ctx.stroke();
|
ctx.beginPath();
|
||||||
ctx.restore();
|
ctx.setLineDash([5, 5]);
|
||||||
}
|
ctx.moveTo(x, topY);
|
||||||
|
ctx.lineTo(x, bottomY);
|
||||||
|
ctx.lineWidth = 1;
|
||||||
|
ctx.strokeStyle = '#665c54'; // bg3
|
||||||
|
ctx.stroke();
|
||||||
|
ctx.restore();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user