import { EarthIcon, LibraryIcon, PaperclipIcon, UserCircleIcon } from "lucide-react"; import { observer } from "mobx-react-lite"; import { useEffect } from "react"; import { NavLink } from "react-router-dom"; import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "@/components/ui/tooltip"; import useCurrentUser from "@/hooks/useCurrentUser"; import { cn } from "@/lib/utils"; import { Routes } from "@/router"; import { userStore } from "@/store"; import { useTranslate } from "@/utils/i18n"; import MemosLogo from "./MemosLogo"; import UserMenu from "./UserMenu"; interface NavLinkItem { id: string; path: string; title: string; icon: React.ReactNode; } interface Props { collapsed?: boolean; className?: string; } const Navigation = observer((props: Props) => { const { collapsed, className } = props; const t = useTranslate(); const currentUser = useCurrentUser(); useEffect(() => { if (!currentUser) { return; } userStore.fetchInboxes(); }, []); const homeNavLink: NavLinkItem = { id: "header-memos", path: Routes.ROOT, title: t("common.memos"), icon: , }; const exploreNavLink: NavLinkItem = { id: "header-explore", path: Routes.EXPLORE, title: t("common.explore"), icon: , }; const attachmentsNavLink: NavLinkItem = { id: "header-attachments", path: Routes.ATTACHMENTS, title: t("common.attachments"), icon: , }; const signInNavLink: NavLinkItem = { id: "header-auth", path: Routes.AUTH, title: t("common.sign-in"), icon: , }; const navLinks: NavLinkItem[] = currentUser ? [homeNavLink, exploreNavLink, attachmentsNavLink] : [exploreNavLink, signInNavLink]; return (
{navLinks.map((navLink) => ( cn( "px-2 py-2 rounded-2xl border flex flex-row items-center text-lg text-sidebar-foreground transition-colors", collapsed ? "" : "w-full px-4", isActive ? "bg-sidebar-accent text-sidebar-accent-foreground border-sidebar-accent-border drop-shadow" : "border-transparent hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:border-sidebar-accent-border opacity-80", ) } key={navLink.id} to={navLink.path} id={navLink.id} viewTransition > {props.collapsed ? (
{navLink.icon}

{navLink.title}

) : ( navLink.icon )} {!props.collapsed && {navLink.title}}
))}
{currentUser && (
)}
); }); export default Navigation;