"use client"; import { useEffect, useRef, useState } from "react"; import { useRouter } from "next/navigation"; import GroupDropdown from "@/components/group-dropdown"; import { useAuthContext } from "@/hooks/auth-context"; import { useGroupsContext } from "@/hooks/groups-context"; export default function Navbar() { const router = useRouter(); const { checkSession, logout } = useAuthContext(); const { activeGroupId } = useGroupsContext(); const [inviteModalCode, setInviteModalCode] = useState(null); const [inviteCopied, setInviteCopied] = useState(false); const [hideNavbar, setHideNavbar] = useState(false); const [userMenuOpen, setUserMenuOpen] = useState(false); const [userEmail, setUserEmail] = useState(null); const userMenuRef = useRef(null); async function handleCopyInvite() { if (!inviteModalCode) return; await navigator.clipboard.writeText(inviteModalCode); setInviteCopied(true); } async function handleLogout() { await logout(); setUserMenuOpen(false); router.push("/login"); } useEffect(() => { let active = true; async function loadUser() { const user = await checkSession(); if (active) setUserEmail(user?.email || null); } loadUser(); return () => { active = false; }; }, [checkSession]); useEffect(() => { function handleClickOutside(event: MouseEvent) { if (!userMenuOpen || !userMenuRef.current) return; if (!userMenuRef.current.contains(event.target as Node)) setUserMenuOpen(false); } document.addEventListener("mousedown", handleClickOutside); return () => document.removeEventListener("mousedown", handleClickOutside); }, [userMenuOpen]); useEffect(() => { if (!inviteModalCode) return; function handleKeyDown(event: KeyboardEvent) { if (event.key === "Escape") setInviteModalCode(null); } window.addEventListener("keydown", handleKeyDown); return () => window.removeEventListener("keydown", handleKeyDown); }, [inviteModalCode]); useEffect(() => { let lastY = window.scrollY; function onScroll() { const current = window.scrollY; const diff = current - lastY; if (Math.abs(diff) < 6) return; if (current <= 8) { setHideNavbar(false); } else if (diff > 0) { setHideNavbar(true); } else { setHideNavbar(false); } lastY = current; } window.addEventListener("scroll", onScroll, { passive: true }); return () => window.removeEventListener("scroll", onScroll); }, []); return ( <>
Fiddy
{ setInviteModalCode(code); setInviteCopied(false); }} />
{userMenuOpen ? (
Signed in as
{userEmail || "User"}
) : null}
{inviteModalCode ? (
{ if (event.key === "Escape") setInviteModalCode(null); }} role="dialog" tabIndex={-1} >
Invite code

Share this code to invite members. You can view it later in group settings.

{inviteModalCode}
) : null} ); }