"use client"; import { BookUser, Calendar, Code, Cog, Globe, Home, Inbox, LayoutDashboard, LayoutTemplate, LogOut, Mail, Search, Server, Settings, Volume2, BookOpenText, ChartColumnBig, ChartArea, BellIcon, CreditCardIcon, LogOutIcon, MoreVerticalIcon, UserCircleIcon, UsersIcon, GaugeIcon, } from "lucide-react"; import { signOut } from "next-auth/react"; import { Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarMenu, SidebarMenuButton, SidebarMenuItem, useSidebar, } from "@unsend/ui/src/sidebar"; import Link from "next/link"; import { MiniThemeSwitcher, ThemeSwitcher } from "./theme/ThemeSwitcher"; import { useSession } from "next-auth/react"; import { isSelfHosted } from "~/utils/common"; import { usePathname } from "next/navigation"; import { Badge } from "@unsend/ui/src/badge"; import { Avatar, AvatarFallback, AvatarImage } from "@unsend/ui/src/avatar"; import { DropdownMenu, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, } from "@unsend/ui/src/dropdown-menu"; // General items const generalItems = [ { title: "Analytics", url: "/dashboard", icon: ChartColumnBig, }, { title: "Emails", url: "/emails", icon: Mail, }, { title: "Templates", url: "/templates", icon: LayoutTemplate, }, ]; // Marketing items const marketingItems = [ { title: "Contacts", url: "/contacts", icon: BookUser, }, { title: "Campaigns", url: "/campaigns", icon: Volume2, }, ]; // Settings items const settingsItems = [ { title: "Domains", url: "/domains", icon: Globe, }, { title: "Developer settings", url: "/dev-settings", icon: Code, }, { title: "Settings", url: "/settings", icon: Cog, }, // TODO: Add conditional logic for Admin item based on isSelfHosted() || session?.user.isAdmin { title: "Admin", url: "/admin", icon: Server, isAdmin: true, isSelfHosted: true, }, ]; export function AppSidebar() { const { data: session } = useSession(); const { state, open } = useSidebar(); const pathname = usePathname(); return ( Unsend Beta General {generalItems.map((item) => { const isActive = pathname?.startsWith(item.url); return ( {item.title} ); })} Marketing {marketingItems.map((item) => { const isActive = pathname?.startsWith(item.url); return ( {item.title} ); })} Settings {settingsItems.map((item) => { const isActive = pathname?.startsWith(item.url); if (item.isAdmin && !session?.user.isAdmin) { return null; } if (item.isSelfHosted && !isSelfHosted()) { return null; } return ( {item.title} ); })} Docs ); } export function NavUser({ user, }: { user: { name?: string | null; email?: string | null; avatar?: string | null; }; }) { const { isMobile } = useSidebar(); return ( {user.avatar ? ( ) : null} {user.name?.charAt(0) ?? user.email?.charAt(0) ?? ""} {user.name ?? user.email ?? ""} {user.name ? user.email : ""} {user.avatar ? ( ) : null} {user.name?.charAt(0) ?? user.email?.charAt(0) ?? ""} {user.name ?? user.email ?? ""} {user.name ? user.email : ""} Team Usage signOut()}> Log out ); }