From 9ceed79cf32c896f8a998399bf1b296506b2cd4a Mon Sep 17 00:00:00 2001 From: dujinkim Date: Tue, 8 Apr 2025 03:08:19 +0000 Subject: 로그인 및 미들웨어 처리. 구조 변경 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/layout/Header.tsx | 215 +++++++++++++++++++++++-------------------- 1 file changed, 113 insertions(+), 102 deletions(-) (limited to 'components/layout/Header.tsx') diff --git a/components/layout/Header.tsx b/components/layout/Header.tsx index 1b6c45bb..498668eb 100644 --- a/components/layout/Header.tsx +++ b/components/layout/Header.tsx @@ -26,19 +26,20 @@ import { SearchIcon, BellIcon, Menu } from "lucide-react"; import { useParams, usePathname } from "next/navigation"; import { cn } from "@/lib/utils"; import Image from "next/image"; -import { mainNav, additionalNav, MenuSection, mainNavVendor, additionalNavVendor } from "@/config/menuConfig"; // 메뉴 구성 임포트 +import { mainNav, additionalNav, MenuSection, MenuItem, mainNavVendor, additionalNavVendor } from "@/config/menuConfig"; // 메뉴 구성 임포트 import { MobileMenu } from "./MobileMenu"; import { CommandMenu } from "./command-menu"; import { useSession, signOut } from "next-auth/react"; - +import GroupedMenuRenderer from "./GroupedMenuRender"; export function Header() { const params = useParams(); - const lng = params.lng as string; + const lng = params?.lng as string; const pathname = usePathname(); const { data: session } = useSession(); - const userName = session?.user?.name || ""; // 없을 수도 있으니 안전하게 처리 + const userName = session?.user?.name || ""; + const domain = session?.user?.domain || ""; const initials = userName .split(" ") .map((word) => word[0]?.toUpperCase()) @@ -51,7 +52,7 @@ export function Header() { setIsMobileMenuOpen(!isMobileMenuOpen); }; - const isPartnerRoute = pathname.includes("/partners"); + const isPartnerRoute = pathname?.includes("/partners"); const main = isPartnerRoute ? mainNavVendor : mainNav; const additional = isPartnerRoute ? additionalNavVendor : additionalNav; @@ -60,10 +61,10 @@ export function Header() { return ( <> -
+
- + {/* 햄버거 메뉴 버튼 (모바일) */} - -
- - {/* 로고 영역 */} -
- - EVCP Logo - eVCP - -
- {/* 데스크탑 네비게이션 메뉴 */} - - - {main.map((section: MenuSection) => ( - - {section.title} - -
    - {section.items.map((item) => ( - - {item.description} - - ))} -
-
-
- ))} - - - {/* 추가 네비게이션 항목 */} - {additional.map((item) => ( - - - - {item.title} - - - - ))} -
+ {/* 로고 영역 - 항상 표시 */} +
+ + EVCP Logo + eVCP + +
+ + {/* 네비게이션 메뉴 - 내부 스크롤 적용, 드롭다운은 제약 없이 표시 */} +
+ {/* NavigationMenu는 z-index를 높게 설정하여 드롭다운이 제대로 표시되도록 함 */} + + {/* 스크롤 가능한 메뉴 리스트 컨테이너 */} +
+ + {main.map((section: MenuSection) => ( + + + {section.title} + + + {/* 그룹핑이 필요한 메뉴의 경우 GroupedMenuRenderer 사용 */} + {section.useGrouping ? ( + + + + ) : ( + +
    + {section.items.map((item) => ( + + {item.description} + + ))} +
+
+ )} +
+ ))} + + {/* 추가 네비게이션 항목 */} + {additional.map((item) => ( + + + + {item.title} + + + + ))} +
+
- -
- - {/* 우측 영역 */} -
- - - - -
- {/* 알림 버튼 */} - - - {/* 사용자 메뉴 (DropdownMenu) */} - - - - - - {initials || "?"} - - - - - My Account - - {/* - Profile - */} - - Settings - - - signOut({ callbackUrl: `/${lng}/login` })}> - Logout - - - - - {/* 모바일 햄버거 메뉴 버튼 */} - + {/* 우측 영역 - 고정 너비와 우선순위로 항상 표시되도록 함 */} +
+ {/* 데스크탑에서는 CommandMenu, 모바일에서는 검색 아이콘만 */} +
+
+ + + {/* 알림 버튼 */} + + + {/* 사용자 메뉴 (DropdownMenu) */} + + + + + + {initials || "?"} + + + + + My Account + + + Settings + + + signOut({ callbackUrl: `/${lng}/${domain}` })}> + Logout + + +
-- cgit v1.2.3