"use client"; import { MemoryIcon } from "../../assets/Memories"; import { Box, LogOut, Trash2, User2 } from "lucide-react"; import React, { useEffect, useState } from "react"; import { MemoriesBar } from "./MemoriesBar"; import { AnimatePresence, motion } from "framer-motion"; import { Bin } from "@/assets/Bin"; import { Avatar, AvatarFallback, AvatarImage } from "@radix-ui/react-avatar"; import { signOut, useSession } from "next-auth/react"; import MessagePoster from "@/app/MessagePoster"; import Chrome from "@/lib/icons"; export type MenuItem = { icon: React.ReactNode | React.ReactNode[]; label: string; content?: React.ReactNode; labelDisplay?: React.ReactNode; }; export default function Sidebar({ selectChange, jwt, }: { selectChange?: (selectedItem: string | null) => void; jwt: string; }) { const { data: session } = useSession(); const [selectedItem, setSelectedItem] = useState(null); const menuItemsTop: Array = [ { icon: , label: "Memories", content: , }, ]; const menuItemsBottom: Array = [ { icon: , label: "Trash", }, { icon: (
{session?.user?.image ? ( ) : ( )} {session?.user?.name?.split(" ").map((n) => n[0])}{" "}
), label: "Profile", content: , }, ]; const menuItems = [...menuItemsTop, ...menuItemsBottom]; const Subbar = menuItems.find((i) => i.label === selectedItem)?.content ?? ( <> ); useEffect(() => { void selectChange?.(selectedItem); }, [selectedItem]); return ( <>
, content: , }} selectedItem={selectedItem} setSelectedItem={setSelectedItem} />
{/* , }} selectedItem={selectedItem} id="trash-button" setSelectedItem={setSelectedItem} /> */} {session?.user?.image ? ( ) : ( )} {session?.user?.name?.split(" ").map((n) => n[0])}{" "}
), content: , }} selectedItem={selectedItem} setSelectedItem={setSelectedItem} />
{selectedItem && {Subbar}}
); } const MenuItem = ({ item: { icon, label, labelDisplay }, selectedItem, setSelectedItem, ...props }: React.HTMLAttributes & { item: MenuItem; selectedItem: string | null; setSelectedItem: React.Dispatch>; }) => ( ); export function SubSidebar({ children }: { children?: React.ReactNode }) { return ( {children} ); } export function ProfileTab({ open }: { open: boolean }) { const { data: session } = useSession(); const [tweetStat, setTweetStat] = useState<[number, number] | null>(); const [memoryStat, setMemoryStat] = useState<[number, number] | null>(); const [loading, setLoading] = useState(true); useEffect(() => { fetch("/api/getCount").then(async (resp) => { const data = (await resp.json()) as any; setTweetStat([data.tweetsCount, data.tweetsLimit]); setMemoryStat([data.pageCount, data.pageLimit]); setLoading(false); }); }, [open]); return (

Profile

{ (e.target as HTMLImageElement).src = "/icons/white_without_bg.png"; }} />

{session?.user?.name}

{session?.user?.email}

Storage

{loading ? (
) : ( <>

Memories
{memoryStat?.join("/")}

0 ? "5%" : "0%", }} className="bg-rgray-5 h-full rounded-full" />

Tweets
{tweetStat?.join("/")}

0 ? "5%" : "0%", }} className="bg-rgray-5 h-full rounded-full" />
)}
); }