From 8974a9b579c44b81796654dd58d3b7d6e7850a12 Mon Sep 17 00:00:00 2001 From: Julien Froidefond Date: Fri, 22 Aug 2025 13:48:33 +0200 Subject: [PATCH] refactor: update team stats component usage in DirectionOverview - Replaced TeamStatsCard with TeamStatsRow for better alignment with new design. - Updated comments and layout structure to reflect the change from grid to list format. - Ensured proper export of TeamStatsRow in team-detail index for consistency. --- .../admin/overview/direction-overview.tsx | 10 +- components/admin/team-detail/index.ts | 1 + .../admin/team-detail/team-stats-row.tsx | 211 ++++++++++++++++++ 3 files changed, 217 insertions(+), 5 deletions(-) create mode 100644 components/admin/team-detail/team-stats-row.tsx diff --git a/components/admin/overview/direction-overview.tsx b/components/admin/overview/direction-overview.tsx index a3d24ea..98cc564 100644 --- a/components/admin/overview/direction-overview.tsx +++ b/components/admin/overview/direction-overview.tsx @@ -2,10 +2,10 @@ import { Building2, Users, TrendingUp, BarChart3, Target } from "lucide-react"; import { - TeamStatsCard, + TeamStatsRow, getSkillLevelLabel, getSkillLevelColor, -} from "../team-detail/team-stats-card"; +} from "../team-detail/team-stats-row"; interface DirectionOverviewProps { direction: string; @@ -159,7 +159,7 @@ export function DirectionOverview({ - {/* Teams Grid */} + {/* Teams List */}
@@ -169,9 +169,9 @@ export function DirectionOverview({ Équipes de la direction
-
+
{teams.map((team) => ( - ; + skillCoverage: number; + onViewDetails?: () => void; + onViewReport?: () => void; +} + +export function getSkillLevelLabel(level: number): string { + if (level < 0.5) return "Débutant"; + if (level < 1.5) return "Intermédiaire"; + if (level < 2.5) return "Avancé"; + return "Expert"; +} + +export function getSkillLevelColor(level: number): string { + if (level < 0.5) return "bg-red-500"; + if (level < 1.5) return "bg-orange-500"; + if (level < 2.5) return "bg-blue-500"; + return "bg-green-500"; +} + +export function getSkillLevelBadgeClasses(level: number): string { + if (level < 0.5) return "bg-red-500/20 border-red-500/30 text-red-300"; + if (level < 1.5) + return "bg-orange-500/20 border-orange-500/30 text-orange-300"; + if (level < 2.5) return "bg-blue-500/20 border-blue-500/30 text-blue-300"; + return "bg-green-500/20 border-green-500/30 text-green-300"; +} + +export function getProgressColor(percentage: number): string { + if (percentage < 30) return "bg-red-500"; + if (percentage < 60) return "bg-orange-500"; + if (percentage < 80) return "bg-blue-500"; + return "bg-green-500"; +} + +export function TeamStatsRow({ + teamId, + teamName, + direction, + totalMembers, + averageSkillLevel, + topSkills, + skillCoverage, + onViewDetails, + onViewReport, +}: TeamStatsRowProps) { + return ( +
+ {/* Layout horizontal compact */} +
+ {/* Informations de base */} +
+
+

+ {teamName} +

+
+
+ + {totalMembers} +
+
+
+ + {/* Mini barre de progression */} +
+
+ Niveau + + {((averageSkillLevel / 3) * 100).toFixed(0)}% + +
+
+
+
+
+
+ + {/* Indicateurs clés compacts */} +
+
+
+ {averageSkillLevel.toFixed(1)} +
+
/ 3.0
+
+ +
+
+ {skillCoverage.toFixed(0)}% +
+
Couv.
+
+ + + + +
+ + {averageSkillLevel < 0.5 + ? "D" + : averageSkillLevel < 1.5 + ? "I" + : averageSkillLevel < 2.5 + ? "A" + : "E"} + +
+
+ +

+ {getSkillLevelLabel(averageSkillLevel)} +

+
+
+
+
+ + {/* Top skills mini */} +
+ {topSkills.slice(0, 3).map((skill, idx) => ( +
+
+ {skill.skillName} +
+
+ {((skill.averageLevel / 3) * 100).toFixed(0)}% +
+
+ ))} +
+ + {/* Actions compactes */} +
+ + +
+
+
+ ); +}