'use client'; import { useState } from 'react'; import { getGravatarUrl } from '@/lib/gravatar'; import { Badge } from '@/components/ui'; import { Button } from '@/components/ui'; import { AddMemberModal } from './AddMemberModal'; import type { TeamMember, TeamRole } from '@/lib/types'; import { TEAM_ROLE_LABELS } from '@/lib/types'; interface MembersListProps { members: TeamMember[]; teamId: string; isAdmin: boolean; onMemberUpdate: () => void; } export function MembersList({ members, teamId, isAdmin, onMemberUpdate }: MembersListProps) { const [addMemberOpen, setAddMemberOpen] = useState(false); const [updatingRole, setUpdatingRole] = useState(null); const [removingMember, setRemovingMember] = useState(null); const handleRoleChange = async (userId: string, newRole: TeamRole) => { setUpdatingRole(userId); try { const response = await fetch(`/api/teams/${teamId}/members`, { method: 'PATCH', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ userId, role: newRole }), }); if (!response.ok) { const error = await response.json(); alert(error.error || 'Erreur lors de la mise à jour du rôle'); return; } onMemberUpdate(); } catch (error) { console.error('Error updating role:', error); alert('Erreur lors de la mise à jour du rôle'); } finally { setUpdatingRole(null); } }; const handleRemoveMember = async (userId: string) => { if (!confirm('Êtes-vous sûr de vouloir retirer ce membre de l\'équipe ?')) { return; } setRemovingMember(userId); try { const response = await fetch(`/api/teams/${teamId}/members?userId=${userId}`, { method: 'DELETE', }); if (!response.ok) { const error = await response.json(); alert(error.error || 'Erreur lors de la suppression du membre'); return; } onMemberUpdate(); } catch (error) { console.error('Error removing member:', error); alert('Erreur lors de la suppression du membre'); } finally { setRemovingMember(null); } }; return (

Membres ({members.length})

{isAdmin && ( )}
{members.map((member) => (
{/* Avatar */} {/* eslint-disable-next-line @next/next/no-img-element */} {member.user.name {/* User Info */}
{member.user.name || 'Sans nom'} {TEAM_ROLE_LABELS[member.role]}
{member.user.email}
{/* Actions */} {isAdmin && (
{member.role === 'MEMBER' ? ( ) : ( )}
)}
))}
{addMemberOpen && ( m.userId)} onClose={() => setAddMemberOpen(false)} onSuccess={onMemberUpdate} /> )}
); }