'use client'; import { useState, useEffect } from 'react'; import { Modal, ModalFooter } from '@/components/ui'; import { Button } from '@/components/ui'; import { Input } from '@/components/ui'; import { Select } from '@/components/ui'; import type { TeamRole } from '@/lib/types'; import { TEAM_ROLE_LABELS } from '@/lib/types'; interface User { id: string; email: string; name: string | null; } interface AddMemberModalProps { teamId: string; existingMemberIds: string[]; onClose: () => void; onSuccess: () => void; } export function AddMemberModal({ teamId, existingMemberIds, onClose, onSuccess }: AddMemberModalProps) { const [users, setUsers] = useState([]); const [searchTerm, setSearchTerm] = useState(''); const [selectedUserId, setSelectedUserId] = useState(null); const [role, setRole] = useState('MEMBER'); const [loading, setLoading] = useState(false); const [fetchingUsers, setFetchingUsers] = useState(false); useEffect(() => { // Fetch all users setFetchingUsers(true); fetch('/api/users') .then((res) => res.json()) .then((data) => { // Filter out existing members const availableUsers = data.filter((user: User) => !existingMemberIds.includes(user.id)); setUsers(availableUsers); }) .catch((error) => { console.error('Error fetching users:', error); }) .finally(() => { setFetchingUsers(false); }); }, [existingMemberIds]); const filteredUsers = users.filter( (user) => user.email.toLowerCase().includes(searchTerm.toLowerCase()) || user.name?.toLowerCase().includes(searchTerm.toLowerCase()) ); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); if (!selectedUserId) { alert('Veuillez sélectionner un utilisateur'); return; } setLoading(true); try { const response = await fetch(`/api/teams/${teamId}/members`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ userId: selectedUserId, role }), }); if (!response.ok) { const error = await response.json(); alert(error.error || 'Erreur lors de l\'ajout du membre'); return; } onSuccess(); onClose(); } catch (error) { console.error('Error adding member:', error); alert('Erreur lors de l\'ajout du membre'); } finally { setLoading(false); } }; return (
{/* User Search */}
setSearchTerm(e.target.value)} disabled={fetchingUsers} />
{/* User List */} {fetchingUsers ? (
Chargement...
) : filteredUsers.length === 0 ? (
{searchTerm ? 'Aucun utilisateur trouvé' : 'Aucun utilisateur disponible'}
) : (
{filteredUsers.map((user) => ( ))}
)} {/* Role Selection */}