// hooks/use-active-menus.ts "use client" import { useState, useEffect } from "react" import type { MenuSection, MenuItem } from "@/config/menuConfig" interface ActiveMenusData { [menuPath: string]: boolean } // 서버에서 활성 메뉴 상태를 가져오는 함수 async function fetchActiveMenus(): Promise { try { const response = await fetch("/api/menu-assignments/active-status") if (!response.ok) { throw new Error("Failed to fetch menu status") } return await response.json() } catch (error) { console.error("Error fetching active menus:", error) return {} } } // 메뉴를 필터링하는 유틸리티 함수 export function filterActiveMenus( sections: MenuSection[], activeMenus: ActiveMenusData ): MenuSection[] { return sections.map(section => ({ ...section, items: section.items.filter(item => { // activeMenus에 데이터가 없으면 기본적으로 활성으로 간주 return activeMenus[item.href] !== false }) })).filter(section => section.items.length > 0) // 빈 섹션 제거 } export function filterActiveAdditionalMenus( items: MenuItem[], activeMenus: ActiveMenusData ): MenuItem[] { return items.filter(item => { // activeMenus에 데이터가 없으면 기본적으로 활성으로 간주 return activeMenus[item.href] !== false }) } // 활성 메뉴 상태를 관리하는 훅 export function useActiveMenus() { const [activeMenus, setActiveMenus] = useState({}) const [isLoading, setIsLoading] = useState(true) useEffect(() => { fetchActiveMenus() .then(data => { setActiveMenus(data) setIsLoading(false) }) .catch(error => { console.error("Failed to load menu status:", error) setIsLoading(false) }) }, []) return { activeMenus, isLoading } }