import React, { useState, lazy, Suspense } from 'react'; import { ChatMessage } from '../store/chatStore'; import { useAuthStore } from '@/features/auth/store/authStore'; import { cn } from '@/lib/utils'; import { Smile, MoreHorizontal, Check, CheckCheck } from 'lucide-react'; import { useChat } from '../hooks/useChat'; import { LoadingSpinner } from '@/components/ui/loading-spinner'; import { Theme } from 'emoji-picker-react'; const EmojiPicker = lazy(() => import('emoji-picker-react').then(module => ({ default: module.default }))); interface ChatMessageProps { message: ChatMessage; } export const ChatMessageComponent: React.FC = ({ message, }) => { const { user } = useAuthStore(); const { addReaction } = useChat(); const isMe = user?.id === message.sender_id; const [showEmojiPicker, setShowEmojiPicker] = useState(false); const handleEmojiClick = (emojiData: { emoji: string }) => { addReaction(message.id, emojiData.emoji); setShowEmojiPicker(false); }; return (
{isMe ? 'You' : message.sender_username || 'Unknown_Signal'} {new Date(message.created_at).toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })}
{/* Emoji Button (Left for Me) */} {isMe && ( )} {/* Message Bubble */}
{/* Attachments */} {message.attachments && message.attachments.length > 0 && (
{message.attachments.map((att, i) => (
{att.file_type.startsWith('image') ? ( {att.file_name} window.open(att.file_url, '_blank')} /> ) : (
{att.file_name}
)}
))}
)}

{message.content}

{/* Emoji Button (Right for Others) */} {!isMe && ( )} {/* Emoji Picker Popover */} {showEmojiPicker && (
setShowEmojiPicker(false)} />
}>
)}
{/* Footer (Reactions + Status) */}
{message.reactions && Object.entries(message.reactions).map(([emoji, users]) => ( ))}
{isMe && (
)}
); };