import React, { useState, useEffect } from 'react'; import { useParams, useNavigate } from 'react-router-dom'; import { Message } from '../types'; import { messageAPI } from '../services/api'; import { useAuth } from '../contexts/AuthContext'; const MessageDetail: React.FC = () => { const { id } = useParams<{ id: string }>(); const navigate = useNavigate(); const { user } = useAuth(); const [message, setMessage] = useState(null); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const [replyContent, setReplyContent] = useState(''); const [sending, setSending] = useState(false); useEffect(() => { fetchMessage(); }, [id]); const fetchMessage = async () => { try { const response = await messageAPI.getMessage(id!); setMessage(response.data); } catch (err: any) { setError(err.response?.data?.error || 'Failed to fetch message'); } finally { setLoading(false); } }; const handleReply = async (e: React.FormEvent) => { e.preventDefault(); if (!message) return; setSending(true); setError(null); try { const recipientId = message.senderId === user?.id ? message.receiverId : message.senderId; await messageAPI.sendMessage({ receiverId: recipientId, subject: `Re: ${message.subject}`, content: replyContent, parentMessageId: message.id }); setReplyContent(''); fetchMessage(); // Refresh to show the new reply alert('Reply sent successfully!'); } catch (err: any) { setError(err.response?.data?.error || 'Failed to send reply'); } finally { setSending(false); } }; const formatDateTime = (dateString: string) => { const date = new Date(dateString); return date.toLocaleString('en-US', { month: 'short', day: 'numeric', year: 'numeric', hour: 'numeric', minute: '2-digit' }); }; if (loading) { return (
Loading...
); } if (!message) { return (
Message not found
); } const isReceiver = message.receiverId === user?.id; const otherUser = isReceiver ? message.sender : message.receiver; return (
{otherUser?.profileImage ? ( {`${otherUser.firstName} ) : (
)}
{message.subject}
{isReceiver ? 'From' : 'To'}: {otherUser?.firstName} {otherUser?.lastName} • {formatDateTime(message.createdAt)}

{message.content}

{message.replies && message.replies.length > 0 && (
Replies
{message.replies.map((reply) => (
{reply.sender?.profileImage ? ( {`${reply.sender.firstName} ) : (
)}
{reply.sender?.firstName} {reply.sender?.lastName} {formatDateTime(reply.createdAt)}

{reply.content}

))}
)}
Send Reply
{error && (
{error}
)}
); }; export default MessageDetail;