import { useState, useEffect, useRef } from 'react'; import { ArrowRight, Send, Trash2, Reply, MoreVertical } from 'lucide-react'; export default function ChatInterface({ room, user, onBack }) { const [messages, setMessages] = useState([]); const [input, setInput] = useState(''); const [replyTo, setReplyTo] = useState(null); const [selectedMessage, setSelectedMessage] = useState(null); const messagesEndRef = useRef(null); const longPressTimer = useRef(null); // بارگذاری پیامها useEffect(() => { const saved = localStorage.getItem(`chat_msgs_${room.id}`); if (saved) { setMessages(JSON.parse(saved)); } else { // پیام خوشآمدگویی پیشفرض const welcomeMsg = { id: 'welcome', text: `به اتاق "${room.name}" خوش آمدید!`, sender: 'system', timestamp: new Date().toISOString(), isSystem: true }; setMessages([welcomeMsg]); localStorage.setItem(`chat_msgs_${room.id}`, JSON.stringify([welcomeMsg])); } scrollToBottom(); }, [room.id]); const scrollToBottom = () => { messagesEndRef.current?.scrollIntoView({ behavior: 'smooth' }); }; const saveMessages = (newMessages) => { setMessages(newMessages); localStorage.setItem(`chat_msgs_${room.id}`, JSON.stringify(newMessages)); }; const handleSend = (e) => { e.preventDefault(); if (!input.trim()) return; const newMessage = { id: Date.now().toString(), text: input, sender: user, timestamp: new Date().toISOString(), replyTo: replyTo, reactions: [] }; saveMessages([...messages, newMessage]); setInput(''); setReplyTo(null); scrollToBottom(); }; const handleDelete = (msgId) => { const newMessages = messages.filter(m => m.id !== msgId); saveMessages(newMessages); setSelectedMessage(null); }; const handleReply = (msg) => { setReplyTo(msg); setSelectedMessage(null); document.getElementById('chat-input')?.focus(); }; const handleReaction = (msgId, emoji) => { const newMessages = messages.map(m => { if (m.id === msgId) { const exists = m.reactions?.find(r => r.user === user); if (exists) { return { ...m, reactions: m.reactions.filter(r => r.user !== user).concat({ user, emoji }) }; } return { ...m, reactions: [...(m.reactions || []), { user, emoji }] }; } return m; }); saveMessages(newMessages); setSelectedMessage(null); }; // هندل کردن لمس طولانی برای نمایش منو const startLongPress = (msg) => { longPressTimer.current = setTimeout(() => { setSelectedMessage(msg); }, 500); }; const cancelLongPress = () => { clearTimeout(longPressTimer.current); }; const findReplyMessage = (replyId) => messages.find(m => m.id === replyId); return (
در حال گفتگو...
{msg.text}
{new Date(msg.timestamp).toLocaleTimeString('fa-IR', { hour: '2-digit', minute: '2-digit' })} {/* ریاکشنها */} {msg.reactions && msg.reactions.length > 0 && (