Some refactoring

This commit is contained in:
Jared He 2022-08-31 19:50:22 -04:00
parent 7f0faa5b2e
commit 29fdbffab1
1 changed files with 41 additions and 25 deletions

View File

@ -59,9 +59,7 @@ export function PieChart({
{(pie) => (
<PieSlice
{...pie}
isLabel={false}
pieTextSize={pieTextSize}
labelTextSize={labelTextSize}
pieTextXOffset={pieTextXOffset}
pieTextYOffset={pieTextYOffset}
/>
@ -73,16 +71,7 @@ export function PieChart({
innerRadius={pieWidth}
outerRadius={width * 0.5}
>
{(pie) => (
<PieSlice
{...pie}
isLabel={true}
pieTextSize={pieTextSize}
labelTextSize={labelTextSize}
pieTextXOffset={pieTextXOffset}
pieTextYOffset={pieTextYOffset}
/>
)}
{(pie) => <PieSliceLabel {...pie} labelTextSize={labelTextSize} />}
</Pie>
</Group>
</svg>
@ -90,9 +79,7 @@ export function PieChart({
}
type PieSliceProps<PieChartData> = ProvidedProps<PieChartData> & {
isLabel: boolean;
pieTextSize: number;
labelTextSize: number;
pieTextXOffset: number;
pieTextYOffset: number;
};
@ -100,9 +87,7 @@ type PieSliceProps<PieChartData> = ProvidedProps<PieChartData> & {
export function PieSlice({
path,
arcs,
isLabel,
pieTextSize,
labelTextSize,
pieTextXOffset,
pieTextYOffset,
}: PieSliceProps<PieChartData>) {
@ -114,18 +99,49 @@ export function PieSlice({
return (
<Group className={styles.group} key={`arc-${arc.data.category}`}>
<path
className={isLabel ? styles.labelPath : styles.piePath}
d={pathArc}
/>
<path className={styles.piePath} d={pathArc} />
<Text
className={isLabel ? styles.labelText : styles.pieText}
x={isLabel ? centroidX : centroidX + pieTextXOffset}
y={isLabel ? centroidY : centroidY + pieTextYOffset}
className={styles.pieText}
x={centroidX + pieTextXOffset}
y={centroidY + pieTextYOffset}
textAnchor="middle"
fontSize={isLabel ? labelTextSize : pieTextSize}
fontSize={pieTextSize}
>
{isLabel ? `${arc.data.category}` : `${arc.data.value}%`}
{`${arc.data.value}%`}
</Text>
</Group>
);
})}
</>
);
}
type PieSliceLabelProps<PieChartData> = ProvidedProps<PieChartData> & {
labelTextSize: number;
};
export function PieSliceLabel({
path,
arcs,
labelTextSize,
}: PieSliceLabelProps<PieChartData>) {
return (
<>
{arcs.map((arc) => {
const [centroidX, centroidY] = path.centroid(arc);
const pathArc = path(arc) as string;
return (
<Group className={styles.group} key={`arc-${arc.data.category}`}>
<path className={styles.labelPath} d={pathArc} />
<Text
className={styles.labelText}
x={centroidX}
y={centroidY}
textAnchor="middle"
fontSize={labelTextSize}
>
{`${arc.data.category}`}
</Text>
</Group>
);