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"
/>