'use client'; import { useState, useEffect } from 'react'; import useSWR from 'swr'; interface User { id: string; email: string; name: string | null; } interface NewConversationModalProps { onClose: () => void; onConversationCreated: (conversationId: string) => void; } const fetcher = (url: string) => fetch(url).then((res) => res.json()); export default function NewConversationModal({ onClose, onConversationCreated, }: NewConversationModalProps) { const [search, setSearch] = useState(''); const [selectedUsers, setSelectedUsers] = useState([]); const [conversationType, setConversationType] = useState<'direct' | 'group'>('direct'); const [groupName, setGroupName] = useState(''); const [isCreating, setIsCreating] = useState(false); // Récupérer l'utilisateur actuel const { data: currentUser } = useSWR('/api/auth/me', fetcher); const { data: users, error } = useSWR( search ? `/api/users?search=${encodeURIComponent(search)}` : '/api/users', fetcher ); // Filtrer l'utilisateur actuel de la liste des utilisateurs const availableUsers = users?.filter((user) => user.id !== currentUser?.id) || []; const handleUserToggle = (userId: string) => { if (selectedUsers.includes(userId)) { setSelectedUsers(selectedUsers.filter((id) => id !== userId)); } else { setSelectedUsers([...selectedUsers, userId]); } }; const handleCreate = async () => { if (selectedUsers.length === 0) { alert('Veuillez sélectionner au moins un utilisateur'); return; } if (conversationType === 'group' && !groupName.trim()) { alert('Veuillez entrer un nom pour le groupe'); return; } setIsCreating(true); try { const response = await fetch('/api/conversations', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ participantIds: selectedUsers, type: conversationType, name: conversationType === 'group' ? groupName : null, }), }); if (response.ok) { const conversation = await response.json(); onConversationCreated(conversation.id); } else { const error = await response.json(); alert(error.error || 'Erreur lors de la création de la conversation'); } } catch (error) { console.error('Erreur:', error); alert('Erreur lors de la création de la conversation'); } finally { setIsCreating(false); } }; return (

Nouvelle conversation

{/* Type de conversation */}
{/* Nom du groupe */} {conversationType === 'group' && (
setGroupName(e.target.value)} placeholder="Entrez le nom du groupe" className="w-full px-4 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-lblue focus:border-transparent" />
)} {/* Recherche d'utilisateurs */}
setSearch(e.target.value)} placeholder="Rechercher par nom ou email..." className="w-full px-4 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-lblue focus:border-transparent" />
{/* Liste des utilisateurs */}
{error && (
Erreur lors du chargement des utilisateurs
)} {!users && !error && (
Chargement...
)} {availableUsers.length === 0 && users && (
Aucun utilisateur trouvé
)} {availableUsers.length > 0 && (
{availableUsers.map((user) => ( ))}
)}
{/* Utilisateurs sélectionnés */} {selectedUsers.length > 0 && (
{selectedUsers.length} utilisateur{selectedUsers.length > 1 ? 's' : ''} sélectionné{selectedUsers.length > 1 ? 's' : ''}
)}
); }