import React from "react"; import { PieChart, Pie, Cell, ResponsiveContainer, Tooltip, Legend, } from "recharts"; export interface BookingStatusPoint { label: string; value: number; color: string; } interface BookingStatusChartProps { data: BookingStatusPoint[]; } const BookingStatusChart: React.FC = ({ data }) => { const safeData = Array.isArray(data) ? data : []; const total = safeData.reduce((sum, item) => sum + (item.value || 0), 0); if (!safeData.length || total <= 0) { return (
No data available
); } // Enrich data with percentage for legend/tooltip const chartData = safeData.map((item) => ({ ...item, percent: total > 0 ? (item.value / total) * 100 : 0, })); const renderLegend: React.FC = ({ payload }) => { if (!payload || !payload.length) return null; return (
{payload.map((entry: any, index: number) => { const color = entry.color; const label = entry.value as string; const percent = entry.payload?.percent ?? 0; const displayPercent = `${percent.toFixed(1)}%`; return (
{label} {displayPercent}
); })}
); }; return (
{chartData.map((entry, index) => ( ))} `${props.payload.percent.toFixed(1)}%` } contentStyle={{ fontFamily: "inherit", fontSize: 11 }} />
); }; export default BookingStatusChart;