diff --git a/frontend/src/app/layout/MainLayout.tsx b/frontend/src/app/layout/MainLayout.tsx index 8159ce6..bb3559d 100644 --- a/frontend/src/app/layout/MainLayout.tsx +++ b/frontend/src/app/layout/MainLayout.tsx @@ -35,10 +35,12 @@ const AUTH_METHOD_LABELS: Record = { }; interface NavItem { to: string; icon: React.ElementType; labelKey: string; } -interface NavGroup { groupKey: string; icon: React.ElementType; items: NavItem[]; } +interface NavDivider { dividerLabel: string; } +interface NavGroup { groupKey: string; icon: React.ElementType; items: (NavItem | NavDivider)[]; } type NavEntry = NavItem | NavGroup; const isGroup = (entry: NavEntry): entry is NavGroup => 'groupKey' in entry; +const isDivider = (item: NavItem | NavDivider): item is NavDivider => 'dividerLabel' in item; const NAV_ENTRIES: NavEntry[] = [ // ── 상황판·감시 ── @@ -82,16 +84,20 @@ const NAV_ENTRIES: NavEntry[] = [ { groupKey: 'group.admin', icon: Settings, items: [ + { dividerLabel: 'AI 플랫폼' }, { to: '/ai-model', icon: Brain, labelKey: 'nav.aiModel' }, { to: '/mlops', icon: Cpu, labelKey: 'nav.mlops' }, { to: '/llm-ops', icon: Brain, labelKey: 'nav.llmOps' }, { to: '/ai-assistant', icon: MessageSquare, labelKey: 'nav.aiAssistant' }, - { to: '/external-service', icon: Globe, labelKey: 'nav.externalService' }, - { to: '/data-hub', icon: Wifi, labelKey: 'nav.dataHub' }, + { dividerLabel: '시스템 운영' }, { to: '/system-config', icon: Database, labelKey: 'nav.systemConfig' }, - { to: '/notices', icon: Megaphone, labelKey: 'nav.notices' }, + { to: '/data-hub', icon: Wifi, labelKey: 'nav.dataHub' }, + { to: '/external-service', icon: Globe, labelKey: 'nav.externalService' }, + { dividerLabel: '사용자 관리' }, { to: '/admin', icon: Settings, labelKey: 'nav.admin' }, { to: '/access-control', icon: Fingerprint, labelKey: 'nav.accessControl' }, + { to: '/notices', icon: Megaphone, labelKey: 'nav.notices' }, + { dividerLabel: '감사·보안' }, { to: '/admin/audit-logs', icon: ScrollText, labelKey: 'nav.auditLogs' }, { to: '/admin/access-logs', icon: History, labelKey: 'nav.accessLogs' }, { to: '/admin/login-history', icon: KeyRound, labelKey: 'nav.loginHistory' }, @@ -99,8 +105,10 @@ const NAV_ENTRIES: NavEntry[] = [ }, ]; -// getPageLabel용 flat 목록 -const NAV_ITEMS = NAV_ENTRIES.flatMap(e => isGroup(e) ? e.items : [e]); +// getPageLabel용 flat 목록 (divider 제외) +const NAV_ITEMS = NAV_ENTRIES.flatMap(e => + isGroup(e) ? e.items.filter((i): i is NavItem => !isDivider(i)) : [e] +); function formatRemaining(seconds: number) { const m = Math.floor(seconds / 60); @@ -255,11 +263,12 @@ export function MainLayout() {