import { useEffect, useState } from 'react'; import { NavLink, Outlet, useNavigate, useLocation } from 'react-router-dom'; import './admin.css'; const NAV = [ { section: '๋ฉ”์ธ' }, { path: '/admin/dashboard', icon: '๐Ÿ“Š', label: '๋Œ€์‹œ๋ณด๋“œ' }, { section: '์ฝ˜ํ…์ธ  ๊ด€๋ฆฌ' }, { path: '/admin/news', icon: '๐Ÿ“ฐ', label: '๋‰ด์Šค/๊ณต์ง€์‚ฌํ•ญ' }, { path: '/admin/recruit', icon: '๐Ÿ‘ฅ', label: '์ฑ„์šฉ๊ณต๊ณ ' }, { section: '๊ณ ๊ฐ ๊ด€๋ฆฌ' }, { path: '/admin/inquiries', icon: '๐Ÿ“ฉ', label: '๋ฌธ์˜ ๊ด€๋ฆฌ', badgeKey: 'pendingInquiries' }, { section: '์‹œ์Šคํ…œ' }, { path: '/admin/settings', icon: 'โš™๏ธ', label: '์„ค์ •' }, ]; export default function AdminLayout() { const navigate = useNavigate(); const location = useLocation(); const [user, setUser] = useState(null); const [pageTitle, setPageTitle] = useState('๋Œ€์‹œ๋ณด๋“œ'); const [badges, setBadges] = useState({}); useEffect(() => { const token = localStorage.getItem('admin_token'); if (!token) { navigate('/admin/login'); return; } const userData = JSON.parse(localStorage.getItem('admin_user') || '{}'); setUser(userData); fetchBadges(token); }, [navigate]); useEffect(() => { const map = { '/admin/dashboard': '๋Œ€์‹œ๋ณด๋“œ', '/admin/news': '๋‰ด์Šค/๊ณต์ง€์‚ฌํ•ญ ๊ด€๋ฆฌ', '/admin/inquiries': '๋ฌธ์˜ ๊ด€๋ฆฌ', '/admin/recruit': '์ฑ„์šฉ๊ณต๊ณ  ๊ด€๋ฆฌ', '/admin/settings': '์„ค์ •', }; setPageTitle(map[location.pathname] || '๊ด€๋ฆฌ์ž'); }, [location.pathname]); const fetchBadges = async (token) => { try { const res = await fetch('/api/admin/dashboard', { headers: { Authorization: `Bearer ${token}` }, }); if (res.ok) { const d = await res.json(); setBadges({ pendingInquiries: d.pendingInquiries || 0 }); } } catch {} }; const logout = () => { localStorage.removeItem('admin_token'); localStorage.removeItem('admin_user'); navigate('/admin/login'); }; if (!user) return null; return (

{pageTitle}

๐Ÿ‘ค {user.displayName || user.username} ๐ŸŒ ํ™ˆํŽ˜์ด์ง€ ๋ณด๊ธฐ
); }