From 3b8f3e411028d4ef465c951f0db359dee96859dd Mon Sep 17 00:00:00 2001 From: Julien Froidefond Date: Mon, 25 Aug 2025 21:57:18 +0200 Subject: [PATCH] feat: total members on direction line manage --- .../admin/management/tree-category-header.tsx | 15 +++++++++++++++ components/admin/teams/teams-list.tsx | 7 +++++++ .../admin/teams/teams-management-page.tsx | 2 ++ hooks/use-teams-management.ts | 18 ++++++++++++++++++ 4 files changed, 42 insertions(+) diff --git a/components/admin/management/tree-category-header.tsx b/components/admin/management/tree-category-header.tsx index c97a90a..77af784 100644 --- a/components/admin/management/tree-category-header.tsx +++ b/components/admin/management/tree-category-header.tsx @@ -15,6 +15,11 @@ interface TreeCategoryHeaderProps { onDelete?: () => void; canDelete?: boolean; isDirection?: boolean; // Pour différencier les directions des catégories de skills + directionStats?: { + direction: string; + totalMembers: number; + hasMembers: boolean; + }; } export function TreeCategoryHeader({ @@ -28,6 +33,7 @@ export function TreeCategoryHeader({ onDelete, canDelete = true, isDirection = false, + directionStats, }: TreeCategoryHeaderProps) { return (
@@ -47,6 +53,15 @@ export function TreeCategoryHeader({ {icon}

{category}

+ {isDirection && directionStats && directionStats.hasMembers && ( + + {directionStats.totalMembers} membre + {directionStats.totalMembers > 1 ? "s" : ""} + + )} {itemCount} {itemLabel} {itemCount > 1 ? "s" : ""} diff --git a/components/admin/teams/teams-list.tsx b/components/admin/teams/teams-list.tsx index 41057e7..202757d 100644 --- a/components/admin/teams/teams-list.tsx +++ b/components/admin/teams/teams-list.tsx @@ -18,6 +18,11 @@ interface TeamsListProps { onDeleteDirection: (direction: string) => void; onViewMembers: (team: TeamType) => void; getTeamStats: (teamId: string) => TeamStats | undefined; + getDirectionStats: (direction: string) => { + direction: string; + totalMembers: number; + hasMembers: boolean; + }; } export function TeamsList({ @@ -29,6 +34,7 @@ export function TeamsList({ onDeleteDirection, onViewMembers, getTeamStats, + getDirectionStats, }: TeamsListProps) { return ( <> @@ -46,6 +52,7 @@ export function TeamsList({ onDelete={() => onDeleteDirection(direction)} canDelete={true} isDirection={true} + directionStats={getDirectionStats(direction)} /> {/* Liste des teams de la direction */} diff --git a/components/admin/teams/teams-management-page.tsx b/components/admin/teams/teams-management-page.tsx index fcd9681..f286a4b 100644 --- a/components/admin/teams/teams-management-page.tsx +++ b/components/admin/teams/teams-management-page.tsx @@ -45,6 +45,7 @@ export function TeamsManagementPage({ setTeamFormData, resetForm, getTeamStats, + getDirectionStats, handleCreateTeam, handleEditTeam, handleUpdateTeam, @@ -145,6 +146,7 @@ export function TeamsManagementPage({ onDeleteDirection={handleDeleteDirection} onViewMembers={handleViewMembers} getTeamStats={getTeamStats} + getDirectionStats={getDirectionStats} /> diff --git a/hooks/use-teams-management.ts b/hooks/use-teams-management.ts index 3c131b1..d68288b 100644 --- a/hooks/use-teams-management.ts +++ b/hooks/use-teams-management.ts @@ -224,6 +224,23 @@ export function useTeamsManagement( // Extraire les directions uniques pour les formulaires const directions = Array.from(new Set(teams.map((team) => team.direction))); + // Calculer les stats par direction + const getDirectionStats = (direction: string) => { + const teamsInDirection = teams.filter( + (team) => team.direction === direction + ); + const totalMembers = teamsInDirection.reduce((total, team) => { + const stats = getTeamStats(team.id); + return total + (stats?.totalMembers || 0); + }, 0); + + return { + direction, + totalMembers, + hasMembers: totalMembers > 0, + }; + }; + return { teams, teamStats, @@ -234,6 +251,7 @@ export function useTeamsManagement( setTeamFormData, resetForm, getTeamStats, + getDirectionStats, handleCreateTeam, handleEditTeam, handleUpdateTeam,