diff --git a/src/layout/Footer.jsx b/src/layout/Footer.jsx index 954549f..cf6a8a4 100644 --- a/src/layout/Footer.jsx +++ b/src/layout/Footer.jsx @@ -1,42 +1,21 @@ -import { Box, Grid, GridItem } from "@chakra-ui/react"; +import { Box, Grid, GridItem, Link, IconButton } from "@chakra-ui/react"; import { FaGithub, FaTwitter } from "react-icons/fa"; import MessageForm from "../components/MessageForm"; + export default function Footer() { return ( - + - - - - {/* Built by{" "} */} - {/* */} - - - @shwosner - - - - - Source code - - - + + ); } diff --git a/src/layout/Header.jsx b/src/layout/Header.jsx index e775274..b8c7a13 100644 --- a/src/layout/Header.jsx +++ b/src/layout/Header.jsx @@ -1,68 +1,140 @@ -import { Button, Grid, GridItem, Image } from "@chakra-ui/react"; -import { FaGithub } from "react-icons/fa"; +import { Button, Grid, GridItem, Image, Box, Text, IconButton, Input, Stack } from "@chakra-ui/react"; +import { FaSignOutAlt } from "react-icons/fa"; +import { BiSave, BiEdit } from "react-icons/bi"; +import { useEffect, useRef, useState } from "react"; import supabase from "../supabaseClient"; - import { useAppContext } from "../context/appContext"; -import NameForm from "./NameForm"; + +function NameForm() { + const { username, setUsername } = useAppContext(); + const [newUsername, setNewUsername] = useState(username); + const [isEditing, setIsEditing] = useState(false); + const inputRef = useRef(null); + + useEffect(() => { + if (isEditing) { + inputRef.current.focus(); + } + }, [isEditing]); + + useEffect(() => { + setNewUsername(username); + }, [username]); + + const handleSubmit = (e) => { + e.preventDefault(); + setIsEditing(false); + + if (!newUsername) { + setNewUsername(username); + return; + } + + setUsername(newUsername); + localStorage.setItem("username", newUsername); + }; + + return ( +
+ + {isEditing ? ( + setNewUsername(e.target.value)} + value={newUsername} + bg="gray.100" + size="sm" + borderRadius="md" + borderColor="gray.300" + focusBorderColor="teal.500" + ref={inputRef} + maxLength="15" + onBlur={handleSubmit} + /> + ) : ( + setIsEditing(true)} + > + Welcome, {newUsername} + + )} + : } + onClick={(e) => { + if (isEditing) { + handleSubmit(e); + } else setIsEditing(true); + }} + /> + +
+ ); +} + export default function Header() { const { username, setUsername, randomUsername, session } = useAppContext(); return ( - - - - - {session ? ( - <> - - Welcome {username} - - - - ) : ( - <> - + + + Logo + + + {session ? ( + <> + + + Welcome, {username}! + + + + } + onClick={() => { + const { error } = supabase.auth.signOut(); + if (error) return console.error("error signOut", error); + const username = randomUsername(); + setUsername(username); + localStorage.setItem("username", username); + }} + /> + + + ) : ( + - - - )} - + )} + +
); } diff --git a/src/layout/NameForm.jsx b/src/layout/NameForm.jsx index 0102467..b8c7a13 100644 --- a/src/layout/NameForm.jsx +++ b/src/layout/NameForm.jsx @@ -1,16 +1,14 @@ -import { useEffect, useRef, useState } from "react"; -import { Input, Stack, IconButton } from "@chakra-ui/react"; +import { Button, Grid, GridItem, Image, Box, Text, IconButton, Input, Stack } from "@chakra-ui/react"; +import { FaSignOutAlt } from "react-icons/fa"; import { BiSave, BiEdit } from "react-icons/bi"; +import { useEffect, useRef, useState } from "react"; +import supabase from "../supabaseClient"; import { useAppContext } from "../context/appContext"; -export default function NameForm() { +function NameForm() { const { username, setUsername } = useAppContext(); const [newUsername, setNewUsername] = useState(username); const [isEditing, setIsEditing] = useState(false); - const toggleEditing = () => { - setIsEditing(!isEditing); - }; - const inputRef = useRef(null); useEffect(() => { @@ -18,61 +16,125 @@ export default function NameForm() { inputRef.current.focus(); } }, [isEditing]); + useEffect(() => { setNewUsername(username); }, [username]); + const handleSubmit = (e) => { e.preventDefault(); - toggleEditing(); + setIsEditing(false); if (!newUsername) { setNewUsername(username); return; } - // setUsername(newUsername); - // setIsEditing(false); setUsername(newUsername); localStorage.setItem("username", newUsername); }; return ( -
- + + {isEditing ? ( setNewUsername(e.target.value)} value={newUsername} bg="gray.100" size="sm" - border="none" - onBlur={handleSubmit} + borderRadius="md" + borderColor="gray.300" + focusBorderColor="teal.500" ref={inputRef} maxLength="15" + onBlur={handleSubmit} /> ) : ( - - Welcome {newUsername} - + setIsEditing(true)} + > + Welcome, {newUsername} + )} : } - border="none" onClick={(e) => { if (isEditing) { handleSubmit(e); - } else toggleEditing(); + } else setIsEditing(true); }} /> ); } + +export default function Header() { + const { username, setUsername, randomUsername, session } = useAppContext(); + + return ( + + + + Logo + + + {session ? ( + <> + + + Welcome, {username}! + + + + } + onClick={() => { + const { error } = supabase.auth.signOut(); + if (error) return console.error("error signOut", error); + const username = randomUsername(); + setUsername(username); + localStorage.setItem("username", username); + }} + /> + + + ) : ( + + + + )} + + + ); +}