diff --git a/client/src/app/layout.tsx b/client/src/app/layout.tsx
index 527d357..954f8a3 100644
--- a/client/src/app/layout.tsx
+++ b/client/src/app/layout.tsx
@@ -2,7 +2,9 @@ import "@/styles/globals.css";
import Navbar from "@/components/Navbar";
import Footer from "@/components/Footer";
-import AuthModal from "@/components/AuthModal";
+import AuthModal from "@/components/auth/AuthModal";
+
+import ContextProvider from "@/context/ContextProvider";
export const metadata = {
title: "chessu",
@@ -13,14 +15,17 @@ export default function RootLayout({ children }: { children: React.ReactNode })
return (
-
+
+
- {children}
+
+ {children}
+
+
+
+
-
- {/* auth modal, put in separate component */}
-
);
diff --git a/client/src/components/AuthModal.tsx b/client/src/components/AuthModal.tsx
deleted file mode 100644
index 39f509d..0000000
--- a/client/src/components/AuthModal.tsx
+++ /dev/null
@@ -1,42 +0,0 @@
-export default function AuthModal() {
- return (
- <>
-
-
- >
- );
-}
diff --git a/client/src/components/auth/AuthModal.tsx b/client/src/components/auth/AuthModal.tsx
new file mode 100644
index 0000000..939793a
--- /dev/null
+++ b/client/src/components/auth/AuthModal.tsx
@@ -0,0 +1,85 @@
+"use client";
+
+import type { FormEvent } from "react";
+import { useRef, useState, useContext } from "react";
+import { SessionContext } from "@/context/session";
+import { setGuestSession } from "@/lib/auth";
+
+// TODO: add login and register views
+
+export default function AuthModal() {
+ const session = useContext(SessionContext);
+ const [buttonLoading, setButtonLoading] = useState(false);
+ const modalToggleRef = useRef(null);
+
+ async function updateGuestName(e: FormEvent) {
+ e.preventDefault();
+
+ const target = e.target as HTMLFormElement;
+ const guestName = target.elements.namedItem("guestName") as HTMLInputElement;
+ if (!guestName || !guestName.value) return;
+
+ setButtonLoading(true);
+ const user = await setGuestSession(guestName.value);
+ if (user) {
+ session?.setUser(user);
+ if (modalToggleRef.current?.checked) {
+ modalToggleRef.current.checked = false;
+ }
+ }
+ guestName.value = "";
+ setButtonLoading(false);
+ }
+
+ return (
+ <>
+
+
+
+
+
+
+ {session?.user !== null && (
+
+ ✕
+
+ )}
+
+
+
+
+
+ >
+ );
+}