From 0607d79484c3cd4fc42bfdae2cb7096e40b869c2 Mon Sep 17 00:00:00 2001 From: Matt Date: Fri, 20 Feb 2026 14:09:43 +0100 Subject: [PATCH] Fix observer analytics crash: guard Nivo edge cases - Disable enableSlices on ResponsiveLine with single data point (causes null reference in Nivo internal slice computation) - Add null check for slice.points[0] in timeline tooltip - Guard ResponsivePie from empty data array in diversity metrics - Add fallback for scoreDistribution.distribution on both observer and admin reports pages Co-Authored-By: Claude Opus 4.6 --- src/app/(admin)/admin/reports/page.tsx | 6 +++--- src/app/(observer)/observer/reports/page.tsx | 6 +++--- src/components/charts/diversity-metrics.tsx | 6 ++++-- src/components/charts/evaluation-timeline.tsx | 3 ++- 4 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/app/(admin)/admin/reports/page.tsx b/src/app/(admin)/admin/reports/page.tsx index 7d18f12..4c6f25a 100644 --- a/src/app/(admin)/admin/reports/page.tsx +++ b/src/app/(admin)/admin/reports/page.tsx @@ -532,9 +532,9 @@ function StageAnalytics() { ) : scoreDistribution ? ( ) : null} diff --git a/src/app/(observer)/observer/reports/page.tsx b/src/app/(observer)/observer/reports/page.tsx index 554b2b6..748e0b2 100644 --- a/src/app/(observer)/observer/reports/page.tsx +++ b/src/app/(observer)/observer/reports/page.tsx @@ -399,9 +399,9 @@ function AnalyticsTab({ selectedValue }: { selectedValue: string }) { ) : scoreDistribution ? ( ) : null} diff --git a/src/components/charts/diversity-metrics.tsx b/src/components/charts/diversity-metrics.tsx index e8d6316..44922e5 100644 --- a/src/components/charts/diversity-metrics.tsx +++ b/src/components/charts/diversity-metrics.tsx @@ -115,7 +115,7 @@ export function DiversityMetricsChart({ data }: DiversityMetricsProps) {
- 0 ? + /> : ( +

No geographic data

+ )}
diff --git a/src/components/charts/evaluation-timeline.tsx b/src/components/charts/evaluation-timeline.tsx index e6b7eac..a296b2c 100644 --- a/src/components/charts/evaluation-timeline.tsx +++ b/src/components/charts/evaluation-timeline.tsx @@ -63,9 +63,10 @@ export function EvaluationTimelineChart({ data }: EvaluationTimelineProps) { pointBorderWidth={2} pointBorderColor="#ffffff" useMesh={true} - enableSlices="x" + enableSlices={formattedData.length >= 2 ? 'x' : false} sliceTooltip={({ slice }) => { const point = slice.points[0] + if (!point) return null const dataItem = formattedData.find( (d) => d.dateFormatted === point.data.xFormatted )