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 (
Recent
{MOCK_CHATS.map((chat) => (
))}
);
});
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 };