import { Fragment, memo, useMemo } from 'react'; import { Icon } from '@iconify/react'; import { Dropdown, type MenuProps } from 'antd'; import { useTranslation } from 'react-i18next'; import logoUnion from '@/assets/iconify/multi-color/logo-union.svg'; import chevronDownIcon from '@/assets/iconify/single-color/chevron-down.svg'; import closeIcon from '@/assets/iconify/single-color/close.svg'; import menuIcon from '@/assets/iconify/single-color/menu.svg'; import { LanguageSwitch } from '@/components/LanguageSwitch'; import { useAuth } from '@/hooks/useAuth'; import { useLoginDialog } from '@/hooks/useLoginDialog'; import { useResponsive } from '@/hooks/useSize'; import type { NavMenuItem } from '@/utils/navUtils'; import { useAction } from './useAction'; import { useService } from './useService'; const Topbar = memo(() => { const { t } = useTranslation(); const { isMobile } = useResponsive(); const { menuItems, isActive, getMenuItemLabel } = useService(); const { isLoggedIn } = useAuth(); const openLoginDialog = useLoginDialog(); const { menuContainerRef, loginButtonRef, languageButtonRef, isMobileMenuOpen, isMobileMenuClosing, isOverflowMenuOpen, visibleMenuItems, overflowMenuItems, handleMenuClick, toggleMobileMenu, closeMobileMenu, handleMenuAnimationEnd, setOverflowMenuOpen, setMenuItemRef, } = useAction({ menuItems, isMobile, isLoggedIn }); const overflowMenuProps: MenuProps = useMemo( () => ({ items: overflowMenuItems.map((item: NavMenuItem) => ({ key: item.name, label: getMenuItemLabel(item), onClick: () => handleMenuClick(item.path), })), }), [overflowMenuItems, getMenuItemLabel, handleMenuClick] ); return (
{/* Logo */}

{t('components.topbar.logo')}

{/* Desktop Menu */} {!isMobile && ( )} {/* Mobile Menu Button */} {isMobile && ( )}
{/* Mobile Expanded Menu */} {isMobile && (isMobileMenuOpen || isMobileMenuClosing) && ( <>
)} ); }); Topbar.displayName = 'Topbar'; export default Topbar;