"use client"; import { useEffect, useState, useCallback } from "react"; import HeaderTop from "./HeaderTop"; import HeaderBottom from "./HeaderBottom"; import Offcanvas from "./Offcanvas"; import MobileMenu from "./MobileMenu"; import { headerMenuService } from "@/services/header-menu.service"; import { HeaderMenu as HeaderMenuType } from "@/types/header-menu"; const Header = () => { const [isOffcanvasOpen, setIsOffcanvasOpen] = useState(false); const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false); const [isSearchOpen, setIsSearchOpen] = useState(false); const [menuItems, setMenuItems] = useState([]); const [isLoading, setIsLoading] = useState(true); const toggleOffcanvas = () => setIsOffcanvasOpen(!isOffcanvasOpen); const toggleMobileMenu = () => setIsMobileMenuOpen(!isMobileMenuOpen); const toggleSearch = () => setIsSearchOpen(!isSearchOpen); // Helper to adapt 'children' from API to 'submenu' for the existing components const adaptMenu = useCallback( (item: HeaderMenuType): any => ({ label: item.title, href: item.url, submenu: item.children && item.children.length > 0 ? item.children.map((child: HeaderMenuType) => adaptMenu(child)) : undefined, }), [], ); useEffect(() => { const fetchMenu = async () => { try { setIsLoading(true); const data = await headerMenuService.getHeaderMenu(); const mappedData = data.map((item) => adaptMenu(item)); setMenuItems(mappedData); } catch (error) { console.error("Error fetching menu in Header:", error); } finally { setIsLoading(false); } }; fetchMenu(); }, [adaptMenu]); return ( <> setIsOffcanvasOpen(false)} menuItems={menuItems} /> setIsMobileMenuOpen(false)} menuItems={menuItems} /> {/* Search Popup */}
setIsSearchOpen(false)}>
); }; export default Header;