"use client"; import { useState, useEffect, useCallback } from "react"; import { Users, User, Calendar, X, Trash2 } from "lucide-react"; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Badge } from "@/components/ui/badge"; import { Skeleton } from "@/components/ui/skeleton"; import { TeamMember } from "@/clients/domains/admin-client"; import { adminClient } from "@/clients"; import { useToast } from "@/hooks/use-toast"; interface TeamMembersModalProps { teamId: string; teamName: string; isOpen: boolean; onClose: () => void; onMemberRemoved?: () => void; // Callback pour notifier le parent qu'un membre a été supprimé } export function TeamMembersModal({ teamId, teamName, isOpen, onClose, onMemberRemoved, }: TeamMembersModalProps) { const [members, setMembers] = useState([]); const [isLoading, setIsLoading] = useState(false); const [error, setError] = useState(null); const [deletingMemberId, setDeletingMemberId] = useState(null); const { toast } = useToast(); const fetchMembers = useCallback(async () => { setIsLoading(true); setError(null); try { const membersData = await adminClient.getTeamMembers(teamId); setMembers(membersData); } catch (err: any) { setError(err.message || "Erreur lors du chargement des membres"); } finally { setIsLoading(false); } }, [teamId]); useEffect(() => { if (isOpen && teamId) { fetchMembers(); } }, [isOpen, teamId, fetchMembers]); const handleRemoveMember = async (memberId: string, memberName: string) => { if ( !confirm(`Êtes-vous sûr de vouloir retirer ${memberName} de l'équipe ?`) ) { return; } setDeletingMemberId(memberId); try { await adminClient.removeTeamMember(teamId, memberId); // Mettre à jour la liste locale setMembers((prev) => prev.filter((member) => member.id !== memberId)); // Notifier le parent qu'un membre a été supprimé onMemberRemoved?.(); toast({ title: "Succès", description: `${memberName} a été retiré de l'équipe`, }); } catch (err: any) { toast({ title: "Erreur", description: err.message || "Erreur lors de la suppression du membre", variant: "destructive", }); } finally { setDeletingMemberId(null); } }; if (!isOpen) return null; return (
Membres de l'équipe

{teamName}

{isLoading ? (
{[...Array(5)].map((_, i) => (
))}
) : error ? (

{error}

) : members.length === 0 ? (

Aucun membre dans cette équipe

Les membres apparaîtront ici une fois qu'ils seront assignés

) : ( <>
{members.length} membre{members.length > 1 ? "s" : ""}
{members.map((member) => (

{member.fullName}

Membre depuis{" "} {new Date(member.joinedAt).toLocaleDateString( "fr-FR", { year: "numeric", month: "long", } )}
))}
)}
); }