| | import React from 'react'; |
| | import { BarChart, Bar, XAxis, YAxis, CartesianGrid, Tooltip, Legend, ResponsiveContainer } from 'recharts'; |
| | import type { TopicFrequency } from '../../utils/analysis.utils.ts'; |
| |
|
| | type TopicFrequencyChartProps = { |
| | data: TopicFrequency[]; |
| | }; |
| |
|
| | const TopicFrequencyChart = ({ data }: TopicFrequencyChartProps) => { |
| | |
| | const chartData = data.map((item) => ({ |
| | ...item, |
| | topicDisplay: item.topic.length > 40 ? `${item.topic.substring(0, 40)}...` : item.topic, |
| | })); |
| |
|
| | return ( |
| | <div className="h-96 w-full"> |
| | <ResponsiveContainer width="100%" height="100%"> |
| | <BarChart |
| | layout="vertical" |
| | data={chartData} |
| | margin={{ top: 5, right: 30, left: 150, bottom: 5 }} |
| | > |
| | <CartesianGrid strokeDasharray="3 3" /> |
| | <XAxis type="number" /> |
| | <YAxis |
| | type="category" |
| | dataKey="topicDisplay" |
| | width={140} |
| | style={{ fontSize: '12px' }} |
| | /> |
| | <Tooltip |
| | formatter={(value: number, name: string) => [value, name === 'proCount' ? 'PRO' : name === 'conCount' ? 'CON' : 'Total']} |
| | contentStyle={{ fontSize: '12px' }} |
| | /> |
| | <Legend |
| | formatter={(value) => (value === 'proCount' ? 'PRO' : value === 'conCount' ? 'CON' : 'Total')} |
| | /> |
| | <Bar dataKey="proCount" fill="#10b981" name="proCount" /> |
| | <Bar dataKey="conCount" fill="#ef4444" name="conCount" /> |
| | </BarChart> |
| | </ResponsiveContainer> |
| | </div> |
| | ); |
| | }; |
| |
|
| | export default TopicFrequencyChart; |
| |
|
| |
|