import { useEffect, useState } from "react"; import { Link } from "react-router-dom"; import { MoonStars, Sun, List } from "react-bootstrap-icons"; import NavItem from "./NavItem"; import Logo from "./logo"; import { useRecoilState } from "recoil"; import { userState } from "./store"; import fetchAPI from "./fetch"; import { APIError, ErrorCode, MeUser } from "./types"; function Navigation() { const [user, setUser] = useRecoilState(userState); useEffect(() => { if (user) return; fetchAPI("/users/@me").then( (res) => setUser(res), (err) => { console.log("fetching /users/@me", err); if ( (err as APIError).code == ErrorCode.InvalidToken || (err as APIError).code == ErrorCode.Forbidden ) { localStorage.removeItem("pronouns-token"); } } ); }, []); const [darkTheme, setDarkTheme] = useState( localStorage.theme === "dark" || (!("theme" in localStorage) && window.matchMedia("(prefers-color-scheme: dark)").matches) ); const [showMenu, setShowMenu] = useState(false); if (darkTheme) { document.documentElement.classList.add("dark"); } else { document.documentElement.classList.remove("dark"); } const storeTheme = (useDarkTheme: boolean | null) => { if (useDarkTheme === null) { localStorage.removeItem("theme"); } else { localStorage.setItem("theme", useDarkTheme ? "dark" : "light"); } }; const nav = user ? ( <> @{user.username} Settings Log out ) : ( <> Log in ); return ( <>
{ setDarkTheme(!darkTheme); storeTheme(!darkTheme); }} title={ darkTheme ? "Switch to light mode" : "Switch to dark mode" } className="cursor-pointer" > {darkTheme ? ( ) : ( )}
setShowMenu(!showMenu)} title="Show menu" className="cursor-pointer flex lg:hidden" >
); } export default Navigation;