Jamjar/src/components/navbar/MobileNavbar.tsx
2025-02-09 02:39:02 +02:00

106 lines
2.8 KiB
TypeScript

"use client";
import {
Image,
Link,
NavbarBrand,
Navbar as NavbarBase,
NavbarContent,
} from "@nextui-org/react";
import NavbarButtonLink from "./NavbarButtonLink";
import { LogInIcon, NotebookPen } from "lucide-react";
import NextImage from "next/image";
import { useEffect, useState } from "react";
import { usePathname } from "next/navigation";
import { getCookie, hasCookie } from "@/helpers/cookie";
import { getCurrentJam } from "@/helpers/jam";
import { JamType } from "@/types/JamType";
import { UserType } from "@/types/UserType";
import MobileNavbarUser from "./MobileNavbarUser";
import ThemeToggle from "../theme-toggle";
import { getSelf } from "@/requests/user";
export default function MobileNavbar() {
const pathname = usePathname();
const [jam, setJam] = useState<JamType | null>();
const [isInJam, setIsInJam] = useState<boolean>();
const [user, setUser] = useState<UserType>();
useEffect(() => {
loadUser();
async function loadUser() {
const jamResponse = await getCurrentJam();
const currentJam = jamResponse?.jam;
setJam(currentJam);
if (!hasCookie("token")) {
setUser(undefined);
return;
}
const response = await getSelf();
const user = await response.json();
if (
currentJam &&
user.jams.filter((jam: JamType) => jam.id == currentJam.id).length > 0
) {
setIsInJam(true);
} else {
setIsInJam(false);
}
if (response.status == 200) {
setUser(user);
} else {
setUser(undefined);
}
}
}, [pathname]);
return (
<NavbarBase maxWidth="2xl" className="bg-[#222] p-1" isBordered height={80}>
<NavbarContent justify="start" className="gap-10">
<NavbarBrand className="flex-grow-0">
<Link
href="/"
className="duration-500 ease-in-out transition-all transform hover:scale-110"
>
<Image
as={NextImage}
src="/images/D2J_Icon.png"
className="min-w-[70px]"
alt="Down2Jam logo"
width={70}
height={59.7}
/>
</Link>
</NavbarBrand>
</NavbarContent>
<NavbarContent justify="end" className="gap-4">
<ThemeToggle />
{!user && (
<NavbarButtonLink icon={<LogInIcon />} name="Log In" href="/login" />
)}
{!user && (
<NavbarButtonLink
icon={<NotebookPen />}
name="Sign Up"
href="/signup"
/>
)}
{user && (
<MobileNavbarUser
user={user}
isInJam={isInJam}
setIsInJam={setIsInJam}
jam={jam}
/>
)}
</NavbarContent>
</NavbarBase>
);
}