'use client'; import Link from "next/link"; import { useEffect, useRef, useState } from "react"; import { usePathname } from "next/navigation"; import MainLogoSvg from "./svgs/mainlogosvg"; import ChevronDownSvg from "./svgs/chevrondownsvg"; const NAV_ITEMS = [ { label: "교육 과정 목록", href: "/course-list" }, { label: "학습 자료실", href: "/resources" }, { label: "공지사항", href: "/notices" }, ]; export default function NavBar() { const pathname = usePathname(); const [isUserMenuOpen, setIsUserMenuOpen] = useState(false); const [userName, setUserName] = useState(''); const userMenuRef = useRef(null); const userButtonRef = useRef(null); const hideCenterNav = /^\/[^/]+\/review$/.test(pathname); const isAdminPage = pathname.startsWith('/admin'); // 사용자 정보 가져오기 useEffect(() => { let isMounted = true; async function fetchUserInfo() { try { const token = localStorage.getItem('token'); if (!token) { return; } const response = await fetch('https://hrdi.coconutmeet.net/auth/me', { method: 'GET', headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${token}`, }, }); if (!response.ok) { if (response.status === 401) { // 토큰이 만료되었거나 유효하지 않은 경우 localStorage.removeItem('token'); } return; } const data = await response.json(); if (isMounted && data.name) { setUserName(data.name); } } catch (error) { console.error('사용자 정보 조회 오류:', error); } } fetchUserInfo(); return () => { isMounted = false; }; }, []); useEffect(() => { if (!isUserMenuOpen) return; const onDown = (e: MouseEvent) => { const t = e.target as Node; if ( userMenuRef.current && !userMenuRef.current.contains(t) && userButtonRef.current && !userButtonRef.current.contains(t) ) { setIsUserMenuOpen(false); } }; const onKey = (e: KeyboardEvent) => { if (e.key === "Escape") setIsUserMenuOpen(false); }; document.addEventListener("mousedown", onDown); document.addEventListener("keydown", onKey); return () => { document.removeEventListener("mousedown", onDown); document.removeEventListener("keydown", onKey); }; }, [isUserMenuOpen]); return (
XR LMS {!hideCenterNav && !isAdminPage && ( )}
{isAdminPage ? ( <> 내 정보 로그아웃 ) : ( <> 내 강좌실 {isUserMenuOpen && (
setIsUserMenuOpen(false)} > 내 정보 수정
)} )}
); }