"use client"; import { useEffect } from "react"; import { usePathname, useRouter } from "next/navigation"; import { MenuAuthorityApi } from "@/entities/menu-authority/@x/menu"; import { getCookie, useAlertStore, useMenuStore } from "@/shared/lib"; import { SITE_ID } from "@/shared/config"; import { MenuApi } from "../api/menu-service"; import { getCurrentMenu } from "./utils"; const MenuWrapper = ({ children }: { children: React.ReactNode }) => { const router = useRouter(); const pathname = usePathname(); const alert = useAlertStore((state) => state.setMessage); const { pageMenuAuthority, setCurrentMenuInfo, setPageMenuAuthority } = useMenuStore((state) => state); const getCurrentMenuInfo = async () => { const menuRoles = await MenuApi.getMenuRoles(SITE_ID); if (!menuRoles) return; return getCurrentMenu(menuRoles, pathname ?? ""); }; const getPageMenuAuthority = async () => { const menuCd = getCookie("menu-code-key"); if (!menuCd) return; const response = await MenuAuthorityApi.getPageMenuAuthority( parseInt(menuCd), ); return response; }; const checkInquiryAuthority = () => { return pageMenuAuthority?.inqAuthrtYn === "Y"; }; useEffect(() => { (async () => { const currentMenu = await getCurrentMenuInfo(); if (currentMenu) setCurrentMenuInfo(currentMenu); const response = await getPageMenuAuthority(); if (response?.length) setPageMenuAuthority(response[0]!); })(); }, [pathname]); useEffect(() => { if (!pageMenuAuthority) return; const inquiryAuthority = checkInquiryAuthority(); if (!inquiryAuthority) alert("페이지에 대한 조회 권한이 없습니다.", () => router.push("/")); }, [pageMenuAuthority]); return <>{children}; }; export { MenuWrapper };