101 lines
2.8 KiB
TypeScript
101 lines
2.8 KiB
TypeScript
import React from 'react';
|
|
import { Radar } from 'react-chartjs-2';
|
|
import {
|
|
Chart as ChartJS,
|
|
RadialLinearScale,
|
|
PointElement,
|
|
LineElement,
|
|
Filler,
|
|
Tooltip,
|
|
Legend,
|
|
} from 'chart.js';
|
|
|
|
ChartJS.register(
|
|
RadialLinearScale,
|
|
PointElement,
|
|
LineElement,
|
|
Filler,
|
|
Tooltip,
|
|
Legend
|
|
);
|
|
|
|
interface Project {
|
|
name: string;
|
|
values: number[];
|
|
}
|
|
|
|
interface RadarChartProps {
|
|
projectData: Project[];
|
|
}
|
|
|
|
// Define a distinct color palette
|
|
const colorPalette = [
|
|
{ border: 'rgba(54, 162, 235, 1)', background: 'rgba(54, 162, 235, 0.2)' }, // Blue
|
|
{ border: 'rgba(255, 99, 132, 1)', background: 'rgba(255, 99, 132, 0.2)' }, // Red
|
|
{ border: 'rgba(75, 192, 192, 1)', background: 'rgba(75, 192, 192, 0.2)' }, // Teal
|
|
{ border: 'rgba(255, 159, 64, 1)', background: 'rgba(255, 159, 64, 0.2)' }, // Orange
|
|
{ border: 'rgba(153, 102, 255, 1)', background: 'rgba(153, 102, 255, 0.2)' }, // Purple
|
|
{ border: 'rgba(255, 205, 86, 1)', background: 'rgba(255, 205, 86, 0.2)' }, // Yellow
|
|
{ border: 'rgba(201, 203, 207, 1)', background: 'rgba(201, 203, 207, 0.2)' }, // Gray
|
|
];
|
|
|
|
const RadarChart: React.FC<RadarChartProps> = ({ projectData }) => {
|
|
const data = {
|
|
labels: ['Decentralization', 'Open Source', 'Tokens', 'API Driven', 'Geo Fencing', 'Capacity'],
|
|
datasets: projectData.map((project, index) => ({
|
|
label: project.name,
|
|
data: project.values,
|
|
backgroundColor: colorPalette[index % colorPalette.length].background, // Use distinct background color
|
|
borderColor: colorPalette[index % colorPalette.length].border, // Use distinct border color
|
|
borderWidth: 1,
|
|
})),
|
|
};
|
|
|
|
const options = {
|
|
scales: {
|
|
r: {
|
|
min: 0,
|
|
max: 100,
|
|
ticks: {
|
|
stepSize: 20,
|
|
color: '#fff', // White color for the numbers
|
|
backdropColor: 'transparent', // Remove the white background
|
|
showLabelBackdrop: false, // Hide the square around the numbers
|
|
font: {
|
|
size: 12, // Adjust the font size if needed
|
|
},
|
|
},
|
|
grid: {
|
|
color: 'rgba(255, 255, 255, 0.1)', // Light gray grid lines for contrast
|
|
},
|
|
angleLines: {
|
|
color: 'rgba(255, 255, 255, 0.1)', // Light gray angle lines for contrast
|
|
},
|
|
pointLabels: {
|
|
color: '#fff', // White color for point labels
|
|
font: {
|
|
size: 12, // Adjust the font size of point labels
|
|
},
|
|
},
|
|
},
|
|
},
|
|
plugins: {
|
|
legend: {
|
|
position: 'top',
|
|
labels: {
|
|
color: '#fff', // White color for legend labels
|
|
},
|
|
},
|
|
},
|
|
};
|
|
|
|
return (
|
|
<Radar
|
|
data={data}
|
|
options={options}
|
|
style={{ background: 'transparent' }} // Ensure the chart background is transparent
|
|
/>
|
|
);
|
|
};
|
|
|
|
export default RadarChart; |