"use client"; import React, { useMemo } from "react"; import { AgCharts } from "ag-charts-react"; import { AgChartOptions } from "ag-charts-community"; interface PieData { label: string; value: number; color?: string; } interface MembershipDistributionChartProps { data: PieData[]; title?: string; } export function MembershipDistributionChart({ data, title = "Membership Distribution", }: MembershipDistributionChartProps) { const chartOptions: AgChartOptions = useMemo( () => ({ title: { text: title, fontSize: 18, fontWeight: "bold", }, data, series: [ { type: "pie", calloutLabelKey: "label", angleKey: "value", sectorLabelKey: "label", fills: data.map((item) => item.color || "#3b82f6"), strokes: ["#ffffff"], strokeWidth: 2, calloutLabel: { enabled: true, fontSize: 12, fontWeight: "bold", }, sectorLabel: { enabled: true, fontSize: 14, fontWeight: "bold", color: "#ffffff", formatter: (params: any) => { const percentage = ( (params.datum.value / data.reduce((sum, item) => sum + item.value, 0)) * 100 ).toFixed(1); return `${params.datum.label}: ${percentage}%`; }, }, highlightStyle: { item: { fillOpacity: 0.8, stroke: "#000000", strokeWidth: 2, }, }, tooltip: { enabled: true, renderer: (params: any) => { const percentage = ( (params.datum.value / data.reduce((sum, item) => sum + item.value, 0)) * 100 ).toFixed(1); return `
${params.datum.label}
Count: ${params.datum.value}
Percentage: ${percentage}%
`; }, }, }, ], legend: { enabled: true, position: "right", fontSize: 12, marker: { shape: "square", size: 12, }, }, padding: { top: 20, right: 20, bottom: 20, left: 20, }, }), [data, title], ); return ; }