diff --git a/client-src/routes/index.tsx b/client-src/routes/index.tsx index 14a5e50..83c6c2c 100644 --- a/client-src/routes/index.tsx +++ b/client-src/routes/index.tsx @@ -25,6 +25,7 @@ function Index() { ); const [hat, setHat] = useState("/TopHatP.png"); const [frog, setFrog] = useState("/Frog1AP.png"); + const [name, setName] = useState("frogboi"); useEffect(() => { function onMessage(event: MessageEvent) { @@ -48,6 +49,7 @@ function Index() { case "get_frog": { setHat(HAT_MAP[data.hat]!); setFrog(FROG_MAP[data.frog]!); + setName(data.name); break; } case "ribbit_sent": { @@ -92,7 +94,7 @@ function Index() { ))}
- +
); diff --git a/client-src/views/room/UserToolbar.tsx b/client-src/views/room/UserToolbar.tsx index 635b909..082b1b5 100644 --- a/client-src/views/room/UserToolbar.tsx +++ b/client-src/views/room/UserToolbar.tsx @@ -1,4 +1,4 @@ -import { RefObject, useMemo, useRef, useState } from "react"; +import { RefObject, useMemo, useRef, useState, useEffect } from "react"; import { Controls } from "../draw/components/controls"; import { Editor } from "../draw/components/editor"; import { HATS, REVERSE_HAT_MAP } from "./state/hats"; @@ -13,6 +13,8 @@ interface UserToolbarProps { frog: string; setFrog: (value: string) => void; setHat: (value: string) => void; + name: string; + setName: (value: string) => void; } export default function UserToolbar({ @@ -20,10 +22,25 @@ export default function UserToolbar({ frog, setFrog, setHat, + name, + setName, }: UserToolbarProps) { - const [name, setName] = useState("frogboi"); const customizeDialogRef = useRef(null); + // Debounce effect - sends name after 500ms of no changes + useEffect(() => { + const timeoutId = setTimeout(() => { + socketSend({ type: "change-name", name }); + }, 500); + + return () => clearTimeout(timeoutId); + }, [name]); + + // Handler for blur event + const handleNameBlur = () => { + socketSend({ type: "change-name", name }); + }; + return ( <> setName(e.currentTarget.value)} + onBlur={handleNameBlur} className="text-lg text-center w-fit border-2 border-green-800 bg-white font-bold rounded pl-2" />