"use client"; import * as React from "react"; import { ArchiveX, Command, File, Inbox, Send, Trash2 } from "lucide-react"; import { NavUser } from "@/features/dashboard/components/nav-user"; import { Label } from "@/components/ui/label"; import { Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupContent, SidebarHeader, SidebarInput, SidebarMenu, SidebarMenuButton, SidebarMenuItem, useSidebar, } from "@/components/ui/sidebar"; import { Switch } from "@/components/ui/switch"; import { Separator } from "@/components/ui/separator"; // This is sample data const data = { user: { name: "shadcn", email: "m@example.com", avatar: "/avatars/shadcn.jpg", }, navMain: [ { title: "Inbox", url: "#", icon: Inbox, isActive: true, }, { title: "Drafts", url: "#", icon: File, isActive: false, }, { title: "Sent", url: "#", icon: Send, isActive: false, }, { title: "Junk", url: "#", icon: ArchiveX, isActive: false, }, { title: "Trash", url: "#", icon: Trash2, isActive: false, }, ], mails: [ { name: "William Smith", email: "williamsmith@example.com", subject: "Meeting Tomorrow", date: "09:34 AM", teaser: "Hi team, just a reminder about our meeting tomorrow at 10 AM.\nPlease come prepared with your project updates.", }, { name: "Alice Smith", email: "alicesmith@example.com", subject: "Re: Project Update", date: "Yesterday", teaser: "Thanks for the update. The progress looks great so far.\nLet's schedule a call to discuss the next steps.", }, { name: "Bob Johnson", email: "bobjohnson@example.com", avatar: "https://ui.shadcn.com/avatars/03.png", subject: "Weekend Plans", date: "2 days ago", teaser: "Hey everyone! I'm thinking of organizing a team outing this weekend.\nWould you be interested in a hiking trip or a beach day?", }, { name: "Emily Davis", email: "emilydavis@example.com", avatar: "https://ui.shadcn.com/avatars/04.png", subject: "Re: Question about Budget", date: "2 days ago", teaser: "I've reviewed the budget numbers you sent over.\nCan we set up a quick call to discuss some potential adjustments?", }, { name: "Michael Wilson", email: "michaelwilson@example.com", avatar: "https://ui.shadcn.com/avatars/05.png", subject: "Important Announcement", date: "1 week ago", teaser: "Please join us for an all-hands meeting this Friday at 3 PM.\nWe have some exciting news to share about the company's future.", }, { name: "Sarah Brown", email: "sarahbrown@example.com", avatar: "https://ui.shadcn.com/avatars/06.png", subject: "Re: Feedback on Proposal", date: "1 week ago", teaser: "Thank you for sending over the proposal. I've reviewed it and have some thoughts.\nCould we schedule a meeting to discuss my feedback in detail?", }, { name: "David Lee", email: "davidlee@example.com", avatar: "https://ui.shadcn.com/avatars/07.png", subject: "New Project Idea", date: "1 week ago", teaser: "I've been brainstorming and came up with an interesting project concept.\nDo you have time this week to discuss its potential impact and feasibility?", }, { name: "Olivia Wilson", email: "oliviawilson@example.com", avatar: "https://ui.shadcn.com/avatars/08.png", subject: "Vacation Plans", date: "1 week ago", teaser: "Just a heads up that I'll be taking a two-week vacation next month.\nI'll make sure all my projects are up to date before I leave.", }, { name: "James Martin", email: "jamesmartin@example.com", avatar: "https://ui.shadcn.com/avatars/09.png", subject: "Re: Conference Registration", date: "1 week ago", teaser: "I've completed the registration for the upcoming tech conference.\nLet me know if you need any additional information from my end.", }, { name: "Sophia White", email: "sophiawhite@example.com", avatar: "https://ui.shadcn.com/avatars/10.png", subject: "Team Dinner", date: "1 week ago", teaser: "To celebrate our recent project success, I'd like to organize a team dinner.\nAre you available next Friday evening? Please let me know your preferences.", }, ], }; export interface Mail { name: string; email: string; avatar?: string; subject: string; date: string; teaser: string; } interface AppSidebarProps { onSelectMail?: (mail: Mail) => void; selectedMailId?: string; } export function AppSidebar({ onSelectMail, selectedMailId }: AppSidebarProps) { const [mails, setMails] = React.useState(data.mails.slice(0, 5)); const [activeItem, setActiveItem] = React.useState(data.navMain[0]); // Apply font to the entire component React.useEffect(() => { document.documentElement.classList.add('font-["Overpass"]'); }, []); const { setOpen: setSidebarOpen } = useSidebar(); return ( {/* This is the first sidebar */} {/* We disable collapsible and adjust width to icon. */} {/* This will make the sidebar appear as icons. */}
Serenity Space Dashboard
{data.navMain.map((item) => ( { setActiveItem(item); const mail = data.mails.sort(() => Math.random() - 0.5); setMails( mail.slice( 0, Math.max(5, Math.floor(Math.random() * 10) + 1) ) ); setSidebarOpen(true); }} isActive={activeItem?.title === item.title} className={`px-2.5 md:px-2 rounded-md transition-all duration-300 ${activeItem?.title === item.title ? "bg-purple-100 text-purple-700" : "hover:bg-gray-100"}`} > {item.title} ))}
{/* This is the second sidebar */} {/* We disable collapsible and let it fill remaining space */}
{activeItem?.title}
{mails.map((mail, index) => ( ))}
); }