real time messaging

This commit is contained in:
jackiettran
2025-11-08 18:20:02 -05:00
parent de32b68ec4
commit 7a5bff8f2b
19 changed files with 2046 additions and 20 deletions

View File

@@ -3,11 +3,13 @@ import { useNavigate } from 'react-router-dom';
import { Message, User } from '../types';
import { messageAPI } from '../services/api';
import { useAuth } from '../contexts/AuthContext';
import { useSocket } from '../contexts/SocketContext';
import ChatWindow from '../components/ChatWindow';
const Messages: React.FC = () => {
const navigate = useNavigate();
const { user } = useAuth();
const { isConnected, onNewMessage } = useSocket();
const [messages, setMessages] = useState<Message[]>([]);
const [loading, setLoading] = useState(true);
const [error, setError] = useState<string | null>(null);
@@ -18,6 +20,27 @@ const Messages: React.FC = () => {
fetchMessages();
}, []);
// Listen for new messages in real-time
useEffect(() => {
if (!isConnected) return;
const cleanup = onNewMessage((newMessage: Message) => {
// Only add if this is a received message (user is the receiver)
if (newMessage.receiverId === user?.id) {
setMessages((prevMessages) => {
// Check if message already exists (avoid duplicates)
if (prevMessages.some(m => m.id === newMessage.id)) {
return prevMessages;
}
// Add new message to the top of the inbox
return [newMessage, ...prevMessages];
});
}
});
return cleanup;
}, [isConnected, user?.id, onNewMessage]);
const fetchMessages = async () => {
try {
const response = await messageAPI.getMessages();