Spaces:
Sleeping
Sleeping
import React, { FC } from 'react'; | |
import { | |
ResponsiveContainer, | |
BarChart, | |
CartesianGrid, | |
XAxis, | |
YAxis, | |
Tooltip, | |
Legend, | |
Bar, | |
} from 'recharts'; | |
import { ChartRow } from '../types'; | |
interface Props { | |
data: ChartRow[]; | |
metrics: string[]; | |
selectedMetric: string; | |
onMetricChange: (metric: string) => void; | |
comparisonMode: boolean; | |
colors: string[]; | |
selectedModels: string[]; | |
} | |
const BarChartView: FC<Props> = ({ | |
data, | |
metrics, | |
selectedMetric, | |
onMetricChange, | |
comparisonMode, | |
colors, | |
selectedModels, | |
}) => ( | |
<div className="bg-white rounded-xl shadow-lg p-6 mb-8"> | |
<div className="flex justify-between items-center mb-6"> | |
<h2 className="text-2xl font-bold text-gray-800"> | |
{comparisonMode ? 'Model Comparison' : 'Performance by Language Pair'} | |
</h2> | |
<select | |
value={selectedMetric} | |
onChange={e => onMetricChange(e.target.value)} | |
className="px-4 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-indigo-500" | |
> | |
{metrics.map(metric => ( | |
<option key={metric} value={metric}> | |
{metric.toUpperCase()} | |
</option> | |
))} | |
</select> | |
</div> | |
<ResponsiveContainer width="100%" height={400}> | |
<BarChart data={data}> | |
<CartesianGrid strokeDasharray="3 3" /> | |
<XAxis dataKey="name" angle={-45} textAnchor="end" height={100} /> | |
<YAxis /> | |
<Tooltip /> | |
<Legend /> | |
{comparisonMode | |
? selectedModels.map((model, i) => ( | |
<Bar key={model} dataKey={model} fill={colors[i % colors.length]} radius={4} /> | |
)) | |
: <Bar dataKey={selectedMetric} fill={colors[0]} radius={4} />} | |
</BarChart> | |
</ResponsiveContainer> | |
</div> | |
); | |
export default BarChartView; | |