import { createContext, ReactNode, useContext, useEffect, useState } from 'react'; import { serverURL } from 'common/api/apiConstants'; import io, { Socket } from 'socket.io-client'; interface SocketProviderState { socket: Socket | null; emit: (topic: string, payload?: T) => void; on: (topic: string, callback: (data: T) => void) => void; off: (topic: string) => void; } type SocketProviderProps = { children: ReactNode; }; const SocketContext = createContext({ socket: null, emit: () => {}, on: () => {}, off: () => {} }); export const useSocket = () => { return useContext(SocketContext); }; function SocketProvider({ children }: SocketProviderProps) { const [socket, setSocket] = useState(null); useEffect(() => { const socketInstance = io(serverURL, { transports: ["websocket"] }); setSocket(socketInstance); return () => { socketInstance.disconnect(); }; }, []); return ( {children} ); } export default SocketProvider;