import { observer } from "mobx-react-lite"; import { useAccountStore } from "@/contexts/AccountContext"; import Plus from "@/icons/plus.svg?react"; import Books from "@/icons/books.svg?react"; import Discord from "@/icons/discord.svg?react"; import Profile from "@/icons/profile.svg?react"; import Settings from "@/icons/settings.svg?react"; import SignOut from "@/icons/sign-out.svg?react"; import { LINKS } from "@/lib/constants"; import { useEffect, useRef, useState, type ReactNode } from "react"; import { Button, type ButtonVariantType } from "../ui/button"; import { Link } from "@tanstack/react-router"; import Logo from "@/icons/logo.svg?react"; import LogoWithText from "@/icons/logo-with-text.svg?react"; import Sidebar from "@/icons/sidebar.svg?react"; import { ChatCell } from "./chat-cell"; import { Dropdown } from "../ui/dropdown"; interface MenuItemType extends ButtonVariantType { name: string; icon: ReactNode; path: string; } const MainMenu = observer(() => { const { isMainMenuOpen } = useAccountStore(); return (
); }); const MOCK_CHATS = Array.from({ length: 20 }, (_, i) => ({ id: i, title: `Chat ${i + 1}`, })); const MainMenuContent = observer(() => { const [isDropdownOpen, setIsDropdownOpen] = useState(false); const { isMainMenuOpen, setIsMainMenuOpen } = useAccountStore(); const containerRef = useRef(null); const [hasScrolled, setHasScrolled] = useState(false); useEffect(() => { const container = containerRef.current; if (!container) return; const handleScroll = () => { setHasScrolled(container.scrollTop > 0); }; container.addEventListener("scroll", handleScroll); handleScroll(); return () => { container.removeEventListener("scroll", handleScroll); }; }, []); const DROPDOWN_OPTIONS = [ { name: "user-mail", icon: , onClick: () => console.log("1"), className: "text-text-light-500", }, { name: "Settings", icon: , onClick: () => console.log("2"), }, { name: "Sigh out", icon: , onClick: () => console.log("3"), }, ]; const showBorder = hasScrolled && isMainMenuOpen; return (
{isMainMenuOpen ? (
) : (
)}
{MENU_ITEMS.map((item) => ( ))}

Recent

    {MOCK_CHATS.map((chat) => ( ))}
setIsDropdownOpen(!isDropdownOpen)} classNameContent="min-w-[200px]" classNameTrigger="w-[195px]" >
); }); const MenuItem = ({ item }: { item: MenuItemType }) => { const { isMainMenuOpen } = useAccountStore(); return (
{item.name}
); }; const MENU_ITEMS: MenuItemType[] = [ { name: "New Chat", icon: , path: "/", variant: "primary", }, { name: "All chats", icon: , path: "/all-chats", variant: "secondary", }, { name: "Support", icon: , path: LINKS.discord, variant: "secondary", }, ]; export { MainMenu, MenuItem, MENU_ITEMS, MainMenuContent };