diff --git a/components/groups/groups-table.tsx b/components/groups/groups-table.tsx index 5c66418d..54fec681 100644 --- a/components/groups/groups-table.tsx +++ b/components/groups/groups-table.tsx @@ -80,7 +80,26 @@ export function GroupsTable({ userRole = [] }: GroupsTableProps) { throw new Error(data.message || "Erreur lors de la récupération des groupes"); } - setGroups(Array.isArray(data) ? data : []); + const groupsWithCounts = await Promise.all( + (Array.isArray(data) ? data : []).map(async (group) => { + try { + const membersResponse = await fetch(`/api/groups/${group.id}/members`); + if (membersResponse.ok) { + const members = await membersResponse.json(); + return { + ...group, + membersCount: Array.isArray(members) ? members.length : 0 + }; + } + return group; + } catch (error) { + console.error(`Error fetching members for group ${group.id}:`, error); + return group; + } + }) + ); + + setGroups(groupsWithCounts); } catch (error) { toast({ title: "Erreur", @@ -217,13 +236,17 @@ export function GroupsTable({ userRole = [] }: GroupsTableProps) { setSelectedGroup(group); try { - // Fetch group members const membersResponse = await fetch(`/api/groups/${groupId}/members`); if (!membersResponse.ok) throw new Error("Failed to fetch group members"); const members = await membersResponse.json(); setGroupMembers(members); - // Fetch all users + setGroups(prev => prev.map(g => + g.id === groupId + ? { ...g, membersCount: members.length } + : g + )); + const usersResponse = await fetch("/api/users"); if (!usersResponse.ok) throw new Error("Failed to fetch users"); const users = await usersResponse.json(); @@ -255,14 +278,12 @@ export function GroupsTable({ userRole = [] }: GroupsTableProps) { throw new Error("Failed to add member"); } - // Update the members list const updatedMember = availableUsers.find(u => u.id === userId); if (updatedMember) { setGroupMembers(prev => [...prev, updatedMember]); setAvailableUsers(prev => prev.filter(u => u.id !== userId)); } - // Update the group's member count in the table setGroups(prev => prev.map(group => group.id === selectedGroup.id ? { ...group, membersCount: group.membersCount + 1 } @@ -294,14 +315,12 @@ export function GroupsTable({ userRole = [] }: GroupsTableProps) { throw new Error("Failed to remove member"); } - // Update the members list const removedMember = groupMembers.find(u => u.id === userId); if (removedMember) { setGroupMembers(prev => prev.filter(u => u.id !== userId)); setAvailableUsers(prev => [...prev, removedMember]); } - // Update the group's member count in the table setGroups(prev => prev.map(group => group.id === selectedGroup.id ? { ...group, membersCount: Math.max(0, group.membersCount - 1) }