Похожие чаты

Import React from 'react'; type NewData = { name: string;

value: number;
color: string;
};

export default function Towers() {
const data: NewData[] = [
{ name: 'A', value: 120, color: '#FF6384' },
{ name: 'B', value: 150, color: '#36A2EB' },
{ name: 'C', value: 90, color: '#FFCE56' },
{ name: 'D', value: 90, color: '#4BC0C0' },
{ name: 'E', value: 150, color: '#9966FF' },
{ name: 'F', value: 60, color: '#FF9F40' },
{ name: 'G', value: 60, color: '#FF6384' },
{ name: 'H', value: 150, color: '#36A2EB' },
{ name: 'I', value: 120, color: '#FFCE56' },
{ name: 'J', value: 120, color: '#4BC0C0' },
];

const totalItems = data.length;
const anglePerSlice = 360 / totalItems; // Each slice gets an equal angle
const getCoordinatesForAngle = (angle: number) => {
const radians = (angle * Math.PI) / 180;
const x = Math.cos(radians);
const y = Math.sin(radians);
return [x, y];
};

let cumulativeAngle = 0;

return (
<div style={{ width: '500px', height: '500px' }}>
<svg viewBox='0 0 2 2' style={{ transform: 'rotate(-90deg)' }}>
{data.map((slice, index) => {
const [startX, startY] = getCoordinatesForAngle(cumulativeAngle);
cumulativeAngle += anglePerSlice;
const [endX, endY] = getCoordinatesForAngle(cumulativeAngle);

const largeArcFlag = anglePerSlice > 180 ? 1 : 0;

const pathData = `
M ${startX + 1} ${startY + 1}
A 1 1 0 ${largeArcFlag} 1 ${endX + 1} ${endY + 1}
L 1 1
`;
// Calculate midpoint for label rotation
const midAngle = cumulativeAngle - anglePerSlice / 2;

return (
<g key={index}>
{/* Slice */}
<path
d={pathData}
fill={slice.color}
stroke='#fff'
strokeWidth='0.01'
onClick={() => alert(`Clicked on ${slice.name}`)}
/>
{/* Rotated Labels */}
<text
x='1'
y='1'
fontSize='0.1'
textAnchor='middle'
fill='#000'
transform={`rotate(${midAngle} 1 1) translate(0 -0.8)`}
onClick={() => alert(`Clicked on label: ${slice.name}`)}
>
{slice.name}
</text>
</g>
);
})}
{/* White inner circle for the donut effect */}
<circle cx='1' cy='1' r='0.6' fill='white' />
</svg>
</div>
);
}

1 ответов

12 просмотров

Start with simpler test data

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
any reference of this implementation?
BitBuddha
29
Ⓐrtto, [4/23/24 7:02 PM] Please explain more fully how it is not working exactly, and what are the steps you are taking, and what error messages come or what happens. Ⓐrtto, ...
Ezza Kezza
2
sounds like people have lost their kaspa on tradeogre... does this mean tradeogre not trustworthy?
Ezza Kezza
15
Страшнейшая правда про списки ЦБ. С первых дней жизни P2P сферы, молодые человеки, начитавшись законодательной базы и "внутренних" документов, решили, что им противостоит сер...
Foxcool
3
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
So much speculation in the last week. So much volatility in price. This is because Hedera has a GC that isn't using the network it's governing. Why aren't people asking why a...
Summit Seeker R
9
Anyone else having this error when trying to make transactions?
Datzel
11
Question: How viable is it to use Anvil as the backend infrastructure for managing a TradFi portfolio, while integrating Flexa for instant liquidity and payment solutions? Cou...
Kevin
2
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Карта сайта