"use client" import { useState } from "react" import Link from "next/link" import { useRouter, usePathname } from "next/navigation" import { ShoppingCart, LogOut, Shield } from "lucide-react" import { NavItem } from "./nav-item" import { Button } from "@/components/ui/button" import { sidebarConfig } from "@/config/sidebar" import { adminSidebarConfig } from "@/config/admin-sidebar" import { logoutUser } from "@/lib/utils/auth" import { toast } from "sonner" import { useUser } from "@/hooks/useUser" const Sidebar: React.FC = () => { const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false) const router = useRouter() const pathname = usePathname() const { isAdmin } = useUser() // Optimize mobile menu closing - use useCallback to prevent unnecessary re-renders const handleMobileMenuClose = () => { setIsMobileMenuOpen(false) } // Determine if we're in admin area const isAdminArea = pathname?.startsWith('/dashboard/admin') // Filter sidebar config based on admin status const getFilteredConfig = () => { if (isAdminArea) { return adminSidebarConfig } // Filter out admin section for non-admin users return sidebarConfig.filter(section => { if (section.title === "Administration") { return isAdmin } return true }) } const currentConfig = getFilteredConfig() const homeLink = isAdminArea ? '/dashboard/admin' : '/dashboard' const icon = isAdminArea ? Shield : ShoppingCart const handleLogout = async () => { try { // Show toast notification for better user experience toast.success("Logging out..."); // Perform the logout await logoutUser(); // The logoutUser function will handle the redirect } catch (error) { console.error("Error during logout:", error); toast.error("Failed to logout. Please try again."); } }; return ( <> {isMobileMenuOpen && (
)} ) } export default Sidebar