Snaplocal / client /src /context /SocketContext.jsx
Kuruva Laxmi
Deploy full stack frontend and backend together
8d9c185
Raw
History Blame Contribute Delete
1.21 kB
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);