import { ArcElement, BarElement, CategoryScale, Chart as ChartJS, ChartType, LinearScale, Tooltip, TooltipPositionerFunction, } from 'chart.js' import clsx from 'clsx' import { ComponentType } from 'react' import { Pie } from 'react-chartjs-2' import { useTranslation } from 'react-i18next' import { StatefulEntityDisplayProps } from '@dao-dao/types' declare module 'chart.js' { interface TooltipPositionerMap { center: TooltipPositionerFunction } } Tooltip.positioners.center = function (elements, eventPosition) { const pos = Tooltip.positioners.average.bind(this)(elements, eventPosition) return ( pos && { x: pos.x / 2, y: pos.y, xAlign: 'center', yAlign: 'bottom', } ) } ChartJS.register(ArcElement, BarElement, CategoryScale, LinearScale, Tooltip) export interface ChartDataEntry { name?: string value: number color: string } export interface TierDataEntry { name: string color?: string readableValue?: string members?: { color?: string address: string readableValue: string }[] } export interface DaoCreateVotingPowerDistributionReviewCardProps { pieData: ChartDataEntry[] tierData: TierDataEntry[] distributionPrefix?: string EntityDisplay: ComponentType } export const DaoCreateVotingPowerDistributionReviewCard = ({ pieData, tierData, distributionPrefix, EntityDisplay, }: DaoCreateVotingPowerDistributionReviewCardProps) => { const { t } = useTranslation() return (

{t('title.votingPower')}

{distributionPrefix} {t('title.distribution')}

{tierData.map(({ name, color, readableValue, members }, index) => (
{color && (
)}

{name}

{readableValue}

{members?.map(({ address, readableValue, color }, index) => (
{color && (
)}

{readableValue}

))}
))}
) } export interface ChartProps { data: ChartDataEntry[] className?: string } const PieChart = ({ data, className }: ChartProps) => ( value), backgroundColor: data.map(({ color }) => color), borderWidth: 0, }, ], }} options={{ // Disable all events (hover, tooltip, etc.) events: [], animation: false, }} /> )