import { useMemo } from "react"; import { MaterialIcon } from "@/components/ui/MaterialIcon"; interface SkillBreakdownProps { questions: Array<{ skillTags: string[]; isCorrect: boolean | null; }>; onSkillClick: (skill: string) => void; activeSkills: string[]; } export function SkillBreakdown({ questions, onSkillClick, activeSkills }: SkillBreakdownProps) { const skillStats = useMemo(() => { const stats = new Map(); for (const q of questions) { if (!q.skillTags) continue; for (const tag of q.skillTags) { const prev = stats.get(tag) ?? { total: 0, correct: 0 }; prev.total++; if (q.isCorrect) prev.correct++; stats.set(tag, prev); } } return Array.from(stats.entries()) .map(([skill, { total, correct }]) => ({ skill, total, correct, pct: total > 0 ? Math.round((correct / total) * 100) : 0, })) .sort((a, b) => a.pct - b.pct); }, [questions]); if (skillStats.length === 0) return null; return (
{skillStats.map(({ skill, total, correct, pct }) => { const isActive = activeSkills.includes(skill); const barColor = pct >= 80 ? "bg-[var(--matcha-600)]" : pct >= 50 ? "bg-[var(--lemon-500)]" : "bg-[var(--pomegranate-400)]"; return ( ); })}
); }