import React, { useState, useCallback } from 'react' /** * Modal for creating a new direct or group conversation. */ export default function NewConversationModal({ currentUserId, apiFetch, onCreated, onClose }) { const [type, setType] = useState('direct') const [recipientInput, setRecipient] = useState('') const [groupTitle, setGroupTitle] = useState('') const [participantInputs, setParticipantInputs] = useState(['', '']) const [body, setBody] = useState('') const [sending, setSending] = useState(false) const [error, setError] = useState(null) const addParticipant = () => setParticipantInputs(p => [...p, '']) const updateParticipant = (i, val) => setParticipantInputs(p => p.map((v, idx) => idx === i ? val : v)) const removeParticipant = (i) => setParticipantInputs(p => p.filter((_, idx) => idx !== i)) const handleSubmit = useCallback(async (e) => { e.preventDefault() setError(null) setSending(true) try { // Resolve usernames to IDs via the search API let payload = { type, body } if (type === 'direct') { const user = await resolveUsername(recipientInput.trim(), apiFetch) payload.recipient_id = user.id } else { const resolved = await Promise.all( participantInputs .map(p => p.trim()) .filter(Boolean) .map(u => resolveUsername(u, apiFetch)) ) payload.participant_ids = resolved.map(u => u.id) payload.title = groupTitle.trim() } const conv = await apiFetch('/api/messages/conversation', { method: 'POST', body: JSON.stringify(payload), }) onCreated(conv) } catch (e) { setError(e.message) } finally { setSending(false) } }, [type, body, recipientInput, groupTitle, participantInputs, apiFetch, onCreated]) return (