'use client'; import Link from 'next/link'; import { useEffect, useRef, useState } from 'react'; import { logoutAdmin } from '@/app/admin/login/actions'; interface MenuItem { href?: string; label: string; submenu?: MenuItem[]; } const ADMIN_LINKS: MenuItem[] = [ { href: '/admin/orders', label: 'Orders' }, { label: '💰 Financial', submenu: [ { href: '/admin/accounts', label: 'Accounts' }, { href: '/admin/accounts/reports', label: 'Reports & Analysis' }, { href: '/admin/accounts/reconciliation', label: 'Bank Reconciliation' }, { href: '/admin/financial-audit', label: 'Audit Trail' }, ], }, { href: '/admin/login-logs', label: 'Admin login activity' }, { href: '/admin/customer-login-logs', label: 'Customer login activity' }, { href: '/admin/products/new', label: 'Add product' }, { href: '/admin/products', label: 'All products' }, { href: '/admin/categories/new', label: 'Add category' }, { href: '/admin/categories', label: 'All categories' }, { href: '/admin/proofs/new', label: 'Upload new design' }, { href: '/admin/proofs', label: 'All proofs' }, { href: '/admin/inbox', label: 'Inbox' }, { href: '/admin/custom-requests', label: 'Photo requests' }, { href: '/admin/promotions', label: 'Promotions' }, { href: '/admin/gallery', label: 'Gallery' }, { href: '/admin/gallery/categories', label: 'Gallery categories' }, { href: '/admin/collections/new', label: 'Add collection' }, { href: '/admin/collections', label: 'All collections' }, { href: '/admin/customers', label: 'Email customers' }, { href: '/admin/maintenance', label: 'Maintenance' }, ]; export default function AdminMenu() { const [open, setOpen] = useState(false); const [expandedSubmenu, setExpandedSubmenu] = useState(null); const ref = useRef(null); useEffect(() => { const onClickOutside = (e: MouseEvent) => { if (ref.current && !ref.current.contains(e.target as Node)) setOpen(false); }; document.addEventListener('mousedown', onClickOutside); return () => document.removeEventListener('mousedown', onClickOutside); }, []); const handleSubmenuToggle = (label: string) => { setExpandedSubmenu(expandedSubmenu === label ? null : label); }; return (
{open && (
{ADMIN_LINKS.map((item) => (
{item.submenu ? ( <> {expandedSubmenu === item.label && (
{item.submenu.map((subitem) => ( setOpen(false)} className="block px-6 py-2 text-xs text-muted hover:text-ink hover:bg-surface" > {subitem.label} ))}
)} ) : ( setOpen(false)} className="block px-4 py-3 text-sm hover:bg-surface" > {item.label} )}
))}
)}
); }