"use client"; import Image from "next/image"; import Link from "next/link"; import { usePathname } from "next/navigation"; import { useEffect, useMemo, useState } from "react"; import { fetchAnonymousMenu, findActiveTopMenu, hasAnyChild, isMenuActive, type MenuItem, } from "@/app/store/common"; export type LnbItem = { label: string; href?: string; children?: LnbItem[]; }; function findOpenMenuCode(items: MenuItem[], pathname: string): number | null { const matched = items.find((item) => { if (isMenuActive(pathname, item)) return true; return (item.children ?? []).some((child) => isMenuActive(pathname, child)); }); return matched?.menuCd ?? null; } export default function Lnb() { const pathname = usePathname(); const [menus, setMenus] = useState([]); const [openMenuCode, setOpenMenuCode] = useState(null); useEffect(() => { let isMounted = true; (async () => { try { const loaded = await fetchAnonymousMenu(); if (!isMounted) return; console.log("Fetched LNB menus:", loaded); setMenus(loaded); } catch (error) { console.error("Failed to load DN LNB menu", error); if (!isMounted) return; setMenus([]); } })(); return () => { isMounted = false; }; }, []); const currentTopMenu = useMemo( () => findActiveTopMenu(menus, pathname), [menus, pathname], ); const secondLevelMenus = useMemo( () => currentTopMenu?.children ?? [], [currentTopMenu], ); // console.log("LNB render", { pathname, currentTopMenu, secondLevelMenus, menus }); useEffect(() => { const defaultOpen = findOpenMenuCode(secondLevelMenus, pathname); setOpenMenuCode(defaultOpen); }, [pathname, secondLevelMenus]); return ( ); }