Spaces:
Sleeping
Sleeping
File size: 1,206 Bytes
0f8617c 8d9c185 0f8617c | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | import React, { createContext, useContext, useEffect, useState } from 'react';
import { io } from 'socket.io-client';
import { useAuth } from './AuthContext';
const SocketContext = createContext();
export const SocketProvider = ({ children }) => {
const { user } = useAuth();
const [socket, setSocket] = useState(null);
const [notifications, setNotifications] = useState([]);
useEffect(() => {
if (user) {
const newSocket = io('/'); // Dynamic relative host
setSocket(newSocket);
newSocket.emit('join', user._id);
newSocket.on('receiveNotification', (notification) => {
setNotifications(prev => [notification, ...prev]);
// Optional: Play a sound or show a toast
});
return () => newSocket.close();
} else {
if (socket) {
socket.close();
setSocket(null);
}
}
}, [user]);
return (
<SocketContext.Provider value={{ socket, notifications, setNotifications }}>
{children}
</SocketContext.Provider>
);
};
export const useSocket = () => useContext(SocketContext);
|