"use client"; import Link from "next/link"; import { usePathname, useRouter } from "next/navigation"; import { useEffect, useMemo, useState } from "react"; import LoginModal from "@/components/LoginModal"; import { fetchAnonymousMenu, isMenuActive, type MenuItem } from "@/app/store/common"; // const REGISTER_HREF = "/reuse/apply/place"; const LS_TOKEN_KEY = "reuse_accessToken"; const LS_USER_KEY = "reuse_userName"; const DEFAULT_NAV_ITEMS: Pick[] = [ { menuCd: 1, menuKornNm: "물 재이용 소개", urlPath: "/reuse/intro/law", newWndwYn: "N" }, { menuCd: 2, menuKornNm: "물 재이용 현황", urlPath: "/reuse/cases/rain", newWndwYn: "N" }, { menuCd: 3, menuKornNm: "물 재이용 사례", urlPath: "/reuse/business/rain/suwon", newWndwYn: "N" }, { menuCd: 4, menuKornNm: "수요신청", urlPath: "/reuse/apply/place", newWndwYn: "N" }, ]; export default function TopNav() { const router = useRouter(); const pathname = usePathname(); const [loginOpen, setLoginOpen] = useState(false); const [userName, setUserName] = useState(null); const [topMenus, setTopMenus] = useState([]); useEffect(() => { const name = localStorage.getItem(LS_USER_KEY); setUserName(name); }, []); useEffect(() => { let isMounted = true; (async () => { try { const loaded = await fetchAnonymousMenu(); if (!isMounted) return; const level1 = loaded.filter((menu) => menu.levelNo === 1 || menu.parentId === null); setTopMenus(level1); } catch (error) { console.error("Failed to load DN top menu", error); if (!isMounted) return; setTopMenus([]); } })(); return () => { isMounted = false; }; }, []); const navItems = useMemo(() => { if (topMenus.length > 0) return topMenus; return DEFAULT_NAV_ITEMS.map((item) => ({ ...item, parentId: null, sortSeq: 0, children: [], levelNo: 1, useYn: "Y", otptYn: "Y", })); }, [topMenus]); const openLogin = () => setLoginOpen(true); const logout = () => { localStorage.removeItem(LS_TOKEN_KEY); localStorage.removeItem(LS_USER_KEY); setUserName(null); router.refresh(); }; return ( <>
{/* ✅ 좌/중/우 정렬이 되도록 컨테이너 구성 */}
{/* 좌측: 로고 */}
HASUON
{/* 중앙: 상단 메뉴 */} {/* ✅ 우측: 로그인 버튼 / 로그인 정보 + 로그아웃 */}
{!userName ? ( ) : ( <> {userName}님 환영합니다. )}
setLoginOpen(false)} onSuccess={({ userName: nextUserName, accessToken }) => { localStorage.setItem(LS_USER_KEY, nextUserName); if (accessToken) localStorage.setItem(LS_TOKEN_KEY, accessToken); setUserName(nextUserName); setLoginOpen(false); router.refresh(); }} /> ); }