"use client"; import * as React from "react" import { Home, MessageSquare, Users, Sparkles, User, Trash2, LogOut } from "lucide-react" import Link from "next/link" import Image from "next/image" import { Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarMenu, SidebarMenuButton, SidebarMenuItem, useSidebar, } from "@/components/ui/sidebar" import { ThemeToggle } from "@/components/theme-toggle" import { SiYoutube } from "react-icons/si" import { RiTelegram2Line } from "react-icons/ri" import { useAuth } from "@/contexts/auth-context" import { Badge } from "@/components/ui/badge" interface AccountItem { title: string; url: string; icon: React.ComponentType>; danger?: boolean; } const navigation = [ { title: "Home", url: "/", icon: Home, }, { title: "About", url: "/about", icon: MessageSquare, }, ] const features = [ { title: "AI Commands", url: "/#ai-features", icon: Sparkles, }, { title: "Video Download", url: "/#youtube-features", icon: SiYoutube, }, { title: "User Accounts & UI", url: "/#user-features", icon: Users, }, ] export function AppSidebar() { const { isAuthenticated, loading, logout } = useAuth(); const { setOpenMobile, isMobile } = useSidebar(); const handleMenuItemClick = () => { if (isMobile) { setOpenMobile(false); } }; const accountItems: AccountItem[] = React.useMemo(() => { if (loading) { return []; } if (isAuthenticated) { return [ { title: "My Account", url: "/account", icon: User, }, { title: "Logout", url: "#", icon: LogOut, danger: true, }, { title: "Delete Account", url: "/account/delete", icon: Trash2, danger: true, }, ]; } else { return [ { title: "Sign in with Telegram", url: "/login", icon: RiTelegram2Line, }, ]; } }, [isAuthenticated, loading]); return (
Kowalski Logo
Kowalski
Beta
Navigation {navigation.map((item) => ( {item.title} ))} {!loading && ( Account {accountItems.map((item) => ( {item.title === "Logout" ? ( { logout(); handleMenuItemClick(); }} className={item.danger ? "text-red-600 hover:text-red-700 dark:text-red-400 dark:hover:text-red-300" : ""} > {item.title} ) : ( {item.title} )} ))} )} Features {features.map((item) => ( {item.title} ))}
) }