import { useState, useRef, useEffect } from 'react'; import { useParams, useNavigate } from 'react-router-dom'; import Layout from '../components/layout/Layout'; import { useAuth } from '../contexts/AuthContext'; import { mockEvents } from '../mocks/events'; import { mockEventMessages } from '../mocks/messages'; import { mockUsers } from '../mocks/users'; import { Send, UserPlus } from 'lucide-react'; const EventChatPage = () => { const { eventId } = useParams(); const { user } = useAuth(); const navigate = useNavigate(); const [messages, setMessages] = useState(mockEventMessages); const [newMessage, setNewMessage] = useState(''); const [activeUsers, setActiveUsers] = useState(mockUsers.slice(1, 5)); const messagesEndRef = useRef(null); const event = mockEvents.find(e => e.id === parseInt(eventId)); const scrollToBottom = () => { messagesEndRef.current?.scrollIntoView({ behavior: 'smooth' }); }; useEffect(() => { scrollToBottom(); }, [messages]); const handleSendMessage = (e) => { e.preventDefault(); if (!newMessage.trim()) return; const message = { id: messages.length + 1, room_id: parseInt(eventId), user_id: user.id, username: user.username, avatar: user.avatar, content: newMessage, type: 'text', created_at: new Date().toISOString(), }; setMessages([...messages, message]); setNewMessage(''); }; const handleMatchWith = (userId) => { // Mockup - in the future will be WebSocket request alert(`Match request sent to user!`); // Simulate acceptance after 1 second setTimeout(() => { navigate(`/matches/1/chat`); }, 1000); }; if (!event) { return ( Event not found ); } return ( {/* Header */} {event.name} {event.location} {/* Active Users Sidebar */} Active users ({activeUsers.length}) {activeUsers.map((activeUser) => ( {activeUser.username} ⭐ {activeUser.rating} handleMatchWith(activeUser.id)} className="p-1 text-primary-600 hover:bg-primary-50 rounded" title="Connect" > ))} {/* Chat Area */} {/* Messages */} {messages.map((message) => { const isOwnMessage = message.user_id === user.id; return ( {message.username} {new Date(message.created_at).toLocaleTimeString('en-US', { hour: '2-digit', minute: '2-digit' })} {message.content} ); })} {/* Message Input */} setNewMessage(e.target.value)} placeholder="Write a message..." className="flex-1 px-4 py-2 border border-gray-300 rounded-lg focus:ring-primary-500 focus:border-primary-500" /> ); }; export default EventChatPage;
{event.location}
{activeUser.username}
⭐ {activeUser.rating}