import { useEffect, useRef, useState } from "react"; import { Link } from "react-router-dom"; import { ChevronDown, Menu, X } from "lucide-react"; import { cn } from "../lib/utils"; export interface MenuItem { label?: string; to?: string; // لینک خارجی (اپ جداگانه، مثل سامانه PM) — در تب جدید باز می‌شود href?: string; active?: boolean; divider?: boolean; onClick?: () => void; // آیتم بازشو (آکاردئونی) — مثلاً فهرست پروژه‌های مدیر پروژه زیر «مدیریت انبار» children?: MenuItem[]; } // منوی همبرگری — بالای راست صفحات؛ نمایش پنل فعلی + ناوبری بین پنل‌ها export function PanelMenu({ items, title }: { items: MenuItem[]; title?: string }) { const [open, setOpen] = useState(false); const [expanded, setExpanded] = useState(null); const ref = useRef(null); useEffect(() => { if (!open) return; const onDoc = (e: MouseEvent) => { if (ref.current && !ref.current.contains(e.target as Node)) setOpen(false); }; document.addEventListener("mousedown", onDoc); return () => document.removeEventListener("mousedown", onDoc); }, [open]); return (
{open && (
{title &&
{title}
} {items.map((it, i) => it.divider ? (
) : it.children?.length ? (
{it.to ? ( { setOpen(false); it.onClick?.(); }} className={cn( "flex flex-1 items-center justify-between gap-3 rounded-lg px-3 py-2 text-[13px] no-underline", it.active ? "font-bold text-white" : "text-ink hover:bg-slate-bg", )} > {it.label} {it.active && ✓ فعلی} ) : ( )}
{expanded === i && (
{it.children.map((c, j) => ( { setOpen(false); c.onClick?.(); }} className={cn( "flex items-center justify-between gap-2 rounded-lg px-2.5 py-1.5 text-[12.5px] no-underline", c.active ? "bg-accent-bg font-bold text-accent" : "text-ink hover:bg-slate-bg", )} > {c.label} {c.active && ✓ فعلی} ))}
)}
) : it.href ? ( setOpen(false)} className={cn( "flex items-center justify-between gap-3 rounded-lg px-3 py-2 text-[13px] no-underline", it.active ? "bg-accent font-bold text-white" : "text-ink hover:bg-slate-bg", )} > {it.label} ↗ ) : it.to ? ( { setOpen(false); it.onClick?.(); }} className={cn( "flex items-center justify-between gap-3 rounded-lg px-3 py-2 text-[13px] no-underline", it.active ? "bg-accent font-bold text-white" : "text-ink hover:bg-slate-bg", )} > {it.label} {it.active && ✓ فعلی} ) : ( ), )}
)}
); }