"use client" import { PieChart, Pie, Cell, ResponsiveContainer, Legend, Tooltip } from "recharts" import { Loader2 } from "lucide-react" interface DetectionDonutChartProps { defectedSignboard: number pothole: number roadCrack: number damagedRoadMarking: number goodSignboard: number isLoading?: boolean } const COLORS = { defectedSignboard: "#3b82f6", // Blue pothole: "#ef4444", // Red roadCrack: "#f59e0b", // Amber/Orange damagedRoadMarking: "#6366f1", // Indigo goodSignboard: "#10b981" // Emerald } export function DetectionDonutChart({ defectedSignboard, pothole, roadCrack, damagedRoadMarking, goodSignboard, isLoading = false }: DetectionDonutChartProps) { if (isLoading) { return (
) } const total = defectedSignboard + pothole + roadCrack + damagedRoadMarking + goodSignboard if (total === 0) { return (

No detections found

Process videos to see data

) } const data = [ { name: "Defected Signboards", value: defectedSignboard, color: COLORS.defectedSignboard }, { name: "Potholes", value: pothole, color: COLORS.pothole }, { name: "Road Cracks", value: roadCrack, color: COLORS.roadCrack }, { name: "Damaged Markings", value: damagedRoadMarking, color: COLORS.damagedRoadMarking }, { name: "Good Signboards", value: goodSignboard, color: COLORS.goodSignboard } ].filter(item => item.value > 0) return (
{data.map((entry, index) => { const gradId = entry.name === "Potholes" ? "gradPothole" : entry.name === "Defected Signboards" ? "gradDefectedSign" : entry.name === "Road Cracks" ? "gradCrack" : entry.name === "Damaged Markings" ? "gradMarking" : "gradGoodSign" return ( ) })} { if (active && payload && payload.length) { const data = payload[0] return (

{data.name}

Count: {data.value}

{((Number(data.value) / total) * 100).toFixed(1)}% of total

) } return null }} /> (
{payload?.map((entry, index) => (
{entry.value}: {data[index].value}
))}
)} /> {/* Center label */}

{total}

Total

) }