import React, { useState, useEffect } from 'react' import { chatAPI } from '../api' import '../styles/chat.css' export default function Chat({ conversationId }) { const [conversations, setConversations] = useState([]) const [selectedConversation, setSelectedConversation] = useState(conversationId || null) const [messages, setMessages] = useState([]) const [newMessage, setNewMessage] = useState('') const [isLoading, setIsLoading] = useState(true) const [error, setError] = useState('') const [isSending, setIsSending] = useState(false) const currentUserId = localStorage.getItem('user_id') useEffect(() => { loadConversations() }, []) useEffect(() => { if (selectedConversation) { loadMessages() // Poll for new messages every 2 seconds const interval = setInterval(loadMessages, 2000) return () => clearInterval(interval) } }, [selectedConversation]) const loadConversations = async () => { try { setIsLoading(true) const response = await chatAPI.getConversations() setConversations(response.data || []) } catch (err) { setError('Failed to load conversations') } finally { setIsLoading(false) } } const loadMessages = async () => { if (!selectedConversation) return try { const response = await chatAPI.getMessages(selectedConversation) setMessages(response.data || []) } catch (err) { setError('Failed to load messages') } } const handleSendMessage = async (e) => { e.preventDefault() if (!newMessage.trim() || !selectedConversation) return setIsSending(true) try { const response = await chatAPI.sendMessage(selectedConversation, newMessage) setMessages((prev) => [...prev, response.data]) setNewMessage('') } catch (err) { setError('Failed to send message') } finally { setIsSending(false) } } if (isLoading) { return
Loading conversations...
} if (conversations.length === 0) { return (

No conversations yet

Match with someone to start chatting!

Discover
) } return (

Conversations

{conversations.map((conv) => (
setSelectedConversation(conv.id)} >

{conv.other_user_display_name}

{conv.latest_message || 'No messages yet'}

))}
{selectedConversation ? ( <>

{conversations.find((c) => c.id === selectedConversation)?.other_user_display_name}

{messages.map((msg) => (

{msg.content}

{new Date(msg.created_at).toLocaleTimeString()}
))}
setNewMessage(e.target.value)} placeholder="Type a message..." disabled={isSending} />
) : (
Select a conversation to start messaging
)}
) }