"use client"; import Link from "next/link"; import Image from "next/image"; 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"; import { useDmStore } from "@/app/store"; // const LS_TOKEN_KEY = "reuse_accessToken"; const LS_USER_KEY = "user"; 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 { actionLogout } = useDmStore((state) => state); const [loginOpen, setLoginOpen] = useState(false); const [userName, setUserName] = useState(null); const [topMenus, setTopMenus] = useState([]); useEffect(() => { const sessionUser = sessionStorage.getItem(LS_USER_KEY); if (sessionUser) { const parsed = JSON.parse(sessionUser) as { dmdCoNm?: string }; setUserName(parsed.dmdCoNm ?? "수요처"); } else { setUserName(null); } }, []); 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 = async () => { // localStorage.removeItem(LS_TOKEN_KEY); // localStorage.removeItem(LS_USER_KEY); setUserName(null); await actionLogout(); router.push("/main"); }; return ( <>
{/* ✅ 좌/중/우 정렬이 되도록 컨테이너 구성 */}
{/* 좌측: 로고 */}
HASUON
{/* 중앙: 상단 메뉴 */} {/* ✅ 우측: 로그인 버튼 / 로그인 정보 + 로그아웃 */}
{!userName ? ( ) : ( <> {userName}님 환영합니다. )}
setLoginOpen(false)} onSuccess={({ userName: nextUserName }) => { // localStorage.setItem(LS_USER_KEY, nextUserName); // if (accessToken) localStorage.setItem(LS_TOKEN_KEY, accessToken); setUserName(nextUserName); setLoginOpen(false); router.refresh(); }} /> ); }