blob: 0007c728d83e1f63772776ce27e9d795ac7e2a0d (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
// 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<ActiveMenusData> {
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<ActiveMenusData>({})
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 }
}
|