"use client"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "@/components/ui/table"; import { Badge } from "@/components/ui/badge"; import { TeamMemberProfile, SkillGap } from "@/lib/team-review-types"; import { UserCheck, GraduationCap } from "lucide-react"; import { TechIcon } from "@/components/icons/tech-icon"; interface SkillMatrixProps { members: TeamMemberProfile[]; skillGaps: SkillGap[]; } export function SkillMatrix({ members, skillGaps }: SkillMatrixProps) { // Filtrer les skills valides et les organiser par catégorie const validSkillGaps = skillGaps.filter( (skill) => skill.skillId && skill.skillName && skill.category ); const skillsByCategory = validSkillGaps.reduce((acc, skill) => { if (!acc[skill.category]) { acc[skill.category] = []; } acc[skill.category].push(skill); return acc; }, {} as Record); const getLevelBadge = (level: string | null) => { const colors = { never: "bg-white/5 text-slate-300", "not-autonomous": "bg-yellow-500/20 text-yellow-200", autonomous: "bg-green-500/20 text-green-200", expert: "bg-blue-500/20 text-blue-200", }; return level ? ( {level} ) : ( - ); }; // Vérifier si nous avons des données valides if (validSkillGaps.length === 0 || members.length === 0) { return ( Matrice des compétences

Aucune donnée disponible pour la matrice des compétences.

); } return ( Matrice des compétences
{Object.entries(skillsByCategory).map(([category, skills]) => (

{category}

Compétence {members.map((member) => ( {member.member.firstName} {member.member.lastName} ))} Couverture {skills.map((skill) => (
{skill.skillName} {skill.risk === "high" && ( Risque )}
{members.map((member) => { const memberSkill = member.skills.find( (s) => s.skillId === skill.skillId ); return (
{getLevelBadge(memberSkill?.level || null)} {memberSkill?.canMentor && ( Mentor )} {memberSkill?.wantsToLearn && ( Apprenant )}
); })}
{Math.round(skill.coverage || 0)}%
))}
))}
); }