import { useEffect, useState, type ReactNode } from "react"; import { apiV26 } from "../lib/api"; import { useAuthStore } from "../store/auth"; import { useLogout } from "../pages/Inventory/panelMenu"; // گیتِ پروژههای مدیر پروژه (PM → 1:N): // - لیست پروژههای تخصیصیافته را از بکاند میگیرد و پروژهی فعالِ ذخیرهشده را // اعتبارسنجی میکند؛ اگر پروژه باطل شده باشد به اولین پروژه برمیگردد // (localStorage هم با همان store بهروز میشود). // - اگر هیچ پروژهای تخصیص نیافته باشد: صفحهی خالی با پیام + دکمهی خروج // (بدون حلقهی ریدایرکت و بدون باطلکردن نشست). // - حالت توسعه (بدون توکن) از همین پروژهی انتخابیِ dev استفاده میکند. export function RequirePmProjects({ children }: { children: ReactNode }) { const user = useAuthStore((s) => s.user); const isDev = useAuthStore((s) => s.isDev); const setProjects = useAuthStore((s) => s.setProjects); const logout = useLogout(); const isPm = user?.role === "pm"; const [state, setState] = useState<"loading" | "ok" | "empty">(isPm ? "loading" : "ok"); useEffect(() => { if (!user || user.role !== "pm") { setState("ok"); return; } if (isDev) { setState(user.project_id ? "ok" : "empty"); return; } let alive = true; setState("loading"); void apiV26.users .myProjects() .then((list) => { if (!alive) return; setProjects(list); // پروژهی فعال را اعتبارسنجی/جایگزین میکند setState(list.length ? "ok" : "empty"); }) .catch(() => { // خطای شبکه نباید کاربر را قفل کند — با وضعیت فعلی ادامه میدهیم if (alive) setState("ok"); }); return () => { alive = false; }; // eslint-disable-next-line react-hooks/exhaustive-deps }, [user?.id, user?.role, isDev]); if (state === "loading") { return (
در حال حاضر هیچ پروژهای به شما تخصیص داده نشده است. برای دسترسی به پنل انبار، از مدیر سیستم بخواهید پروژهای را به شما اختصاص دهد.