import type { ReactNode } from "react"; import { useLocation, useNavigate } from "react-router-dom"; import { ChevronRight, ClipboardList } from "lucide-react"; import { cn } from "../../lib/utils"; import { useAuthStore, type AuthUser } from "../../store/auth"; const ROLE_LABELS: Record = { admin: "ادمین", procurement_manager: "مدیر تدارکات", pm: "مدیر پروژه", supervisor: "سرپرست پروژه", }; export function userSubtitle(user: AuthUser | null | undefined): string { if (!user) return ""; const fullName = `${user.first_name || ""} ${user.last_name || ""}`.trim() || user.display_name || "کاربر"; const username = user.username || user.casdoor_id || "-"; const role = user.role_label || (user.role ? ROLE_LABELS[user.role] : "بدون نقش"); const proj = user.role === "supervisor" && user.project_name ? ` – پروژه: ${user.project_name}` : ""; return `${fullName} | نام کاربری: ${username} | نقش: ${role}${proj}`; } interface HeaderProps { title: string; sub?: string; backTo?: string; // مسیر بازگشتِ جایگزین (وقتی سابقه‌ای در برنامه نیست) backLabel?: string; actions?: ReactNode; // دکمه‌های سمت چپ brand?: boolean; // نمایش آیکون دفتر کنار عنوان icon?: ReactNode; // آیکون سفارشی جعبه‌ی کنار منو (پیش‌فرض: ClipboardList) menu?: ReactNode; // منوی همبرگری بالای راست (ناوبری بین پنل‌ها) } // نوار بالای هر صفحه: منو (همبرگری) + جعبه‌ی آیکون + عنوان + اکشن‌ها export function Header({ title, sub, backTo, backLabel = "بازگشت", actions, brand, icon, menu }: HeaderProps) { const navigate = useNavigate(); const location = useLocation(); const user = useAuthStore((s) => s.user); const userSub = userSubtitle(user); const displaySub = sub !== undefined ? sub : userSub; // اگر کاربر از داخل برنامه به این صفحه آمده، یک قدم برمی‌گردیم؛ // اگر مستقیم باز شده (بدون سابقه‌ی داخلی)، به backTo می‌رویم. const goBack = () => { if (location.key !== "default") navigate(-1); else if (backTo) navigate(backTo); }; return (
{menu &&
{menu}
} {(icon || brand) && ( {icon || } )} {backTo && ( )}

{title}

{displaySub &&
{displaySub}
}
{actions}
); } // بدنه‌ی صفحه با عرض محدود و چینش مرکزی export function PageLayout({ children, className, }: { children: ReactNode; className?: string; }) { return (
{children}
); }