import { NavLink, useLocation } from "react-router-dom"; import { ArrowLeftRight, Boxes, Building2, CalendarDays, LayoutDashboard, PackageSearch, Scale, Truck, type LucideIcon, } from "lucide-react"; import { cn } from "../../lib/utils"; import { useAuthStore } from "../../store/auth"; interface TabDef { to: string; label: string; icon: LucideIcon; end?: boolean; } // تب‌های دفتر تدارکات (ادمین / مدیر تدارکات) const PROC_TABS: TabDef[] = [ { to: "/", label: "داشبورد", icon: LayoutDashboard, end: true }, { to: "/suppliers", label: "تأمین‌کننده‌ها", icon: Truck }, { to: "/projects", label: "پروژه‌ها", icon: Building2 }, { to: "/units", label: "ضرایب", icon: Scale }, ]; // تب‌های پنل انبار برای مدیر پروژه const PM_INV_TABS: TabDef[] = [ { to: "/inventory", label: "انبار", icon: Boxes, end: true }, { to: "/inventory/change", label: "تغییر موجودی", icon: ArrowLeftRight }, { to: "/inventory/daily", label: "کنترل روزانه", icon: CalendarDays }, { to: "/inventory/arrivals", label: "کالاهای در راه", icon: PackageSearch }, ]; // تب‌های پنل انبار برای ادمین / مدیر تدارکات / مدیر پروژه (آینه‌ی ناوبری بالای دسکتاپ) const ADMIN_INV_TABS: TabDef[] = [ { to: "/inventory", label: "انبار", icon: Boxes, end: true }, { to: "/inventory/daily", label: "کنترل روزانه", icon: CalendarDays }, { to: "/inventory/warehouses", label: "انبارها", icon: Building2 }, { to: "/inventory/arrivals", label: "کالاهای در راه", icon: PackageSearch }, ]; function TabBar({ tabs }: { tabs: TabDef[] }) { return ( ); } // نوار تب پایینِ موبایل — فقط زیر 768px (md:hidden) و فقط در صفحاتِ نقش کاربر: // مدیر پروژه → تب‌های انبار؛ ادمین/مدیر تدارکات → تب‌های دفتر یا انبار (بر اساس مسیر). // در ویزارد نمایش داده نمی‌شود تا با جابه‌جایی تصادفی، کارِ کاربر از بین نرود. export function MobileTabBar() { const role = useAuthStore((s) => s.user?.role); const { pathname } = useLocation(); if (pathname === "/login" || pathname === "/admin") return null; // خانه حداقلی استعلام (تدارکات limited): بدون تب ERP — PM هم تب‌بار خودش را دارد if (pathname === "/requester" || pathname === "/panel/pm") return null; // کاربر فقطِ تدارکات-limited: تب‌های انبار/دفتر ندارد const panels = useAuthStore.getState().user?.panels ?? {}; if (panels.procurement === "limited" && !panels.inventory && !panels.pm) return null; // پنل مدیریت پروژه: iframe تمام‌صفحه‌ی PM است و خودش تب‌بار داخلی دارد if (pathname === "/panel/pm") return null; const isPM = role === "pm"; const isSupervisor = role === "supervisor"; const isOffice = role === "admin" || role === "procurement_manager"; if (pathname.startsWith("/inventory")) { if (isPM) return ; if (isOffice || isSupervisor) return ; return null; } // سرپرست پروژه به بخش‌های تدارکات/دفتر دسترسی ندارد if (isSupervisor) return null; if (pathname === "/wizard") return null; const onOfficePage = pathname === "/" || pathname === "/projects" || pathname === "/units" || pathname.startsWith("/suppliers"); if (onOfficePage && isOffice) return ; return null; }