From e511ae5b9b1b35b133bfb5c031e5c0fb13bacd7e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carl-Gerhard=20Lindesva=CC=88rd?= Date: Fri, 7 Nov 2025 14:25:41 +0100 Subject: [PATCH] fix: pie chart --- .../report-chart/common/serie-name.tsx | 2 +- .../src/components/report-chart/pie/chart.tsx | 62 +++++++++++++++++-- 2 files changed, 59 insertions(+), 5 deletions(-) diff --git a/apps/start/src/components/report-chart/common/serie-name.tsx b/apps/start/src/components/report-chart/common/serie-name.tsx index e4c5fcc0..3e381912 100644 --- a/apps/start/src/components/report-chart/common/serie-name.tsx +++ b/apps/start/src/components/report-chart/common/serie-name.tsx @@ -40,5 +40,5 @@ export function SerieName({ name, className }: SerieNameProps) { return renderSerieName([name]); } - return <>{name}; + return {name}; } diff --git a/apps/start/src/components/report-chart/pie/chart.tsx b/apps/start/src/components/report-chart/pie/chart.tsx index 52b7fc37..506b59ca 100644 --- a/apps/start/src/components/report-chart/pie/chart.tsx +++ b/apps/start/src/components/report-chart/pie/chart.tsx @@ -4,17 +4,66 @@ import { cn } from '@/utils/cn'; import { round } from '@/utils/math'; import { getChartColor } from '@/utils/theme'; import { truncate } from '@/utils/truncate'; +import { Fragment } from 'react'; import { Cell, Pie, PieChart, ResponsiveContainer, Tooltip } from 'recharts'; +import { useNumber } from '@/hooks/use-numer-formatter'; +import { formatDate } from '@/utils/date'; import { AXIS_FONT_PROPS } from '../common/axis'; +import { PreviousDiffIndicator } from '../common/previous-diff-indicator'; import { ReportChartTooltip } from '../common/report-chart-tooltip'; import { ReportTable } from '../common/report-table'; +import { SerieIcon } from '../common/serie-icon'; +import { SerieName } from '../common/serie-name'; import { useReportChartContext } from '../context'; interface Props { data: IChartData; } +const PieTooltip = (props: { payload?: any[] }) => { + const number = useNumber(); + return ( +
+ {props.payload?.map((serie, index) => { + const item = serie.payload; + return ( + + {index === 0 && item.date && ( +
+
{formatDate(new Date(item.date))}
+
+ )} +
+
+
+
+ + +
+
+
+ {number.formatWithUnit(item.count)} + {!!item.previous && ( + + ({number.formatWithUnit(item.previous.sum.value)}) + + )} +
+ +
+
+
+ + ); + })} +
+ ); +}; + export function Chart({ data }: Props) { const { isEditMode } = useReportChartContext(); const { series, setVisibleSeries } = useVisibleSeries(data); @@ -25,8 +74,10 @@ export function Chart({ data }: Props) { color: getChartColor(serie.index), index: serie.index, name: serie.names.join(' > '), + names: serie.names, count: serie.metrics.sum, percent: serie.metrics.sum / sum, + previous: serie.metrics.previous ? serie.metrics.previous : undefined, })); return ( @@ -36,11 +87,11 @@ export function Chart({ data }: Props) { > - } /> + } /> ); @@ -105,9 +156,10 @@ const renderLabel = ({ fill="white" textAnchor="middle" dominantBaseline="central" - fontWeight={700} pointerEvents={'none'} {...AXIS_FONT_PROPS} + fontSize={12} + fontWeight={700} > {percent}% @@ -118,6 +170,8 @@ const renderLabel = ({ textAnchor={x > cx ? 'start' : 'end'} dominantBaseline="central" {...AXIS_FONT_PROPS} + fontSize={10} + fontWeight={700} > {truncate(name, 20)}