mirror of
https://github.com/Ategon/Jamjar.git
synced 2025-02-12 06:16:21 +00:00
106 lines
2.8 KiB
TypeScript
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>
|
|
);
|
|
}
|