diff --git a/client/src/components/Lobby.jsx b/client/src/components/Lobby.jsx new file mode 100644 index 0000000..9bb2c05 --- /dev/null +++ b/client/src/components/Lobby.jsx @@ -0,0 +1,64 @@ +import { useSocket } from '@/context/SocketProvider'; +import { useRouter } from 'next/router'; +import React, { useCallback, useEffect, useState } from 'react' + +const LobbyScreen = () => { + const [email, setEmail] = useState(""); + const [room, setRoom] = useState(""); + + const socket = useSocket(); + const router = useRouter(); + // console.log(socket); + + const handleSubmitForm = useCallback((e) => { + e.preventDefault(); + socket.emit('room:join', { email, room }); + }, [email, room, socket]); + + const handleJoinRoom = useCallback((data) => { + const { email, room } = data; + router.push(`/room/${room}`); + }, [router]); + + useEffect(() => { + socket.on("room:join", handleJoinRoom); + return () => { + socket.off("room:join", handleJoinRoom); + } + }, [socket, handleJoinRoom]); + + return ( +
+

Lobby

+
+
+ + setEmail(e.target.value)} + /> +
+ + setRoom(e.target.value)} + /> +
+ +
+
+
+ ) +} + +export default LobbyScreen \ No newline at end of file diff --git a/client/src/context/SocketProvider.jsx b/client/src/context/SocketProvider.jsx new file mode 100644 index 0000000..49ce45e --- /dev/null +++ b/client/src/context/SocketProvider.jsx @@ -0,0 +1,20 @@ +import React, { createContext, useContext, useMemo } from 'react' +import { io } from "socket.io-client"; + +const SocketContext = createContext(null); + +export const useSocket = () => { + const socket = useContext(SocketContext); + return socket; +} + +const SocketProvider = (props) => { + const socket = useMemo(() => io("localhost:8080"), []); + return ( + + {props.children} + + ) +} + +export default SocketProvider \ No newline at end of file