"use client"; import React from "react"; // No hooks needed since state is now managed by parent import Link from "next/link"; import Image from "next/image"; import { usePathname } from "next/navigation"; import { signOut } from "next-auth/react"; import { SimpleThemeToggle } from "@/components/ui/theme-toggle"; // Icons for the sidebar const DashboardIcon = () => ( ); const CompanyIcon = () => ( ); const UsersIcon = () => ( ); const SessionsIcon = () => ( ); const LogoutIcon = () => ( ); const MinimalToggleIcon = ({ isExpanded }: { isExpanded: boolean }) => ( {isExpanded ? ( ) : ( )} ); export interface SidebarProps { isExpanded: boolean; onToggle: () => void; isMobile?: boolean; // Add this property to indicate mobile viewport onNavigate?: () => void; // Function to call when navigating to a new page } interface NavItemProps { href: string; label: string; icon: React.ReactNode; isExpanded: boolean; isActive: boolean; onNavigate?: () => void; // Function to call when navigating to a new page } const NavItem: React.FC = ({ href, label, icon, isExpanded, isActive, onNavigate, }) => ( { if (onNavigate) { onNavigate(); } }} > {icon} {isExpanded ? ( {label} ) : ( {label} )} ); export default function Sidebar({ isExpanded, onToggle, isMobile = false, onNavigate, }: SidebarProps) { const pathname = usePathname() || ""; const handleLogout = () => { signOut({ callbackUrl: "/login" }); }; return ( <> {/* Backdrop overlay when sidebar is expanded on mobile */} {isExpanded && isMobile && ( )} {/* Toggle button when sidebar is collapsed - above logo */} {!isExpanded && ( { e.preventDefault(); // Prevent any navigation onToggle(); }} className="p-1.5 rounded-md hover:bg-muted focus:outline-none focus:ring-2 focus:ring-primary transition-colors group" aria-label="Expand sidebar" aria-expanded={isExpanded} aria-controls="main-sidebar" > )} {/* Logo section with link to homepage */} {isExpanded && ( LiveDash )} {isExpanded && ( { e.preventDefault(); // Prevent any navigation onToggle(); }} className="p-1.5 rounded-md hover:bg-muted focus:outline-none focus:ring-2 focus:ring-primary transition-colors group" aria-label="Collapse sidebar" aria-expanded={isExpanded} aria-controls="main-sidebar" > )} } isExpanded={isExpanded} isActive={pathname === "/dashboard"} onNavigate={onNavigate} /> } isExpanded={isExpanded} isActive={pathname === "/dashboard/overview"} onNavigate={onNavigate} /> } isExpanded={isExpanded} isActive={pathname.startsWith("/dashboard/sessions")} onNavigate={onNavigate} /> } isExpanded={isExpanded} isActive={pathname === "/dashboard/company"} onNavigate={onNavigate} /> } isExpanded={isExpanded} isActive={pathname === "/dashboard/users"} onNavigate={onNavigate} /> {/* Theme Toggle */} {isExpanded && ( Theme )} {/* Logout Button */} {isExpanded ? ( Logout ) : ( Logout )} > ); }