Untitled
"use client" import * as React from "react" import { Minus, Plus, Trash2 } from "lucide-react" import { useTheme } from "next-themes" import { useSettings } from "@/hooks/useSettings" import { Collapsible, CollapsibleContent, CollapsibleTrigger, } from "@/components/ui/collapsible" import { Sidebar, SidebarContent, SidebarGroup, SidebarHeader, SidebarMenu, SidebarMenuItem, SidebarMenuButton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarRail, } from "@/components/ui/sidebar" import { Button } from "@/components/ui/button" import { Moon, Sun } from "lucide-react" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select" // Modified navigation data const data = { navMain: [ { title: "Home", url: "/", isDirectLink: true, }, { title: "Gallery", url: "/gallery", isDirectLink: true, }, { title: "API Reference", url: "#", items: [ { title: "Components", url: "#", }, { title: "File Conventions", url: "#", }, { title: "Functions", url: "#", }, { title: "next.config.js Options", url: "#", }, { title: "CLI", url: "#", }, { title: "Edge Runtime", url: "#", }, ], }, { title: "Architecture", url: "#", items: [ { title: "Accessibility", url: "#", }, { title: "Fast Refresh", url: "#", }, { title: "Next.js Compiler", url: "#", }, { title: "Supported Browsers", url: "#", }, { title: "Turbopack", url: "#", }, ], }, { title: "Community", url: "#", items: [ { title: "Contribution Guide", url: "#", }, ], }, ], } export function AppSidebar({ ...props }: React.ComponentProps<typeof Sidebar>) { const { theme } = useTheme() const { settings, updateSettings } = useSettings() const handleThemeToggle = () => { const newDarkMode = theme === "light" ? 1 : 0 updateSettings({ dark_mode: newDarkMode }) } const handleLanguageChange = (value: string) => { updateSettings({ language: value }) localStorage.setItem('sortimate-language', value) } return ( <Sidebar {...props}> <SidebarHeader className="border-b p-4"> <div className="flex items-center gap-3 px-2"> <div className="flex h-10 w-10 items-center justify-center rounded-lg bg-gradient-to-br from-sidebar-primary to-sidebar-primary/80 text-sidebar-primary-foreground"> <Trash2 className="h-6 w-6" /> </div> <div className="flex flex-col"> <span className="text-lg font-semibold text-sidebar-foreground">SortiMate</span> <span className="text-xs text-sidebar-foreground/60">AI Recycling Assistant</span> </div> </div> </SidebarHeader> <SidebarContent> <SidebarGroup> <SidebarMenu> {data.navMain.map((item) => ( item.isDirectLink ? ( <SidebarMenuItem key={item.title}> <SidebarMenuButton asChild> <a href={item.url}>{item.title}</a> </SidebarMenuButton> </SidebarMenuItem> ) : ( <Collapsible key={item.title} className="group/collapsible" > <SidebarMenuItem> <CollapsibleTrigger asChild> <SidebarMenuButton> {item.title}{" "} <Plus className="ml-auto group-data-[state=open]/collapsible:hidden" /> <Minus className="ml-auto group-data-[state=closed]/collapsible:hidden" /> </SidebarMenuButton> </CollapsibleTrigger> {item.items?.length ? ( <CollapsibleContent> <SidebarMenuSub> {item.items.map((item) => ( <SidebarMenuSubItem key={item.title}> <SidebarMenuSubButton asChild isActive={item.isActive} > <a href={item.url}>{item.title}</a> </SidebarMenuSubButton> </SidebarMenuSubItem> ))} </SidebarMenuSub> </CollapsibleContent> ) : null} </SidebarMenuItem> </Collapsible> ) ))} </SidebarMenu> </SidebarGroup> </SidebarContent> <div className="mt-auto border-t p-4 space-y-2"> <Button variant="ghost" size="sm" className="w-full justify-between" onClick={handleThemeToggle} > <span className="text-sm">Theme</span> <div className="flex items-center"> <Sun className="h-[1.2rem] w-[1.2rem] rotate-0 scale-100 transition-all dark:-rotate-90 dark:scale-0" /> <Moon className="absolute h-[1.2rem] w-[1.2rem] rotate-90 scale-0 transition-all dark:rotate-0 dark:scale-100" /> </div> </Button> <Select value={settings?.language || "EN"} onValueChange={handleLanguageChange} > <SelectTrigger className="w-full"> <SelectValue /> </SelectTrigger> <SelectContent> <SelectItem value="EN">English</SelectItem> <SelectItem value="DE">Deutsch</SelectItem> </SelectContent> </Select> </div> <SidebarRail /> </Sidebar> ) }
Leave a Comment