UNPKG

@redocly/theme

Version:

Shared UI components lib

52 lines (43 loc) 1.68 kB
import { useMemo } from 'react'; import { useLocation } from 'react-router-dom'; import type { ResolvedNavItem } from '@redocly/config'; import { useThemeHooks } from '../use-theme-hooks'; import { useThemeConfig } from '../use-theme-config'; import { MobileMenuType } from '../../constants/common'; export const useMobileMenuLevels = () => { const { useTranslate, useCurrentProduct, usePageVersions, useSidebarItems } = useThemeHooks(); const { versions = [] } = usePageVersions() || {}; const activeVersion = versions.find((version) => version?.active); const { currentItems: sidebarItems } = useSidebarItems(activeVersion); const { translate } = useTranslate(); const currentProduct = useCurrentProduct(); const productThemeConfig = useThemeConfig(); const location = useLocation(); const hasProductNavbarOverride = currentProduct?.configOverride?.navbar; const productNavItems = ( hasProductNavbarOverride ? productThemeConfig.navbar?.items || [] : [] ) as ResolvedNavItem[]; const menuLevels = useMemo(() => { const menuLevels = [ { label: translate('mobileMenu.mainMenu', 'Main menu'), type: MobileMenuType.MAIN_MENU, }, ]; if (currentProduct && productNavItems.length) { menuLevels.push({ label: currentProduct.name, type: MobileMenuType.PRODUCT, }); } if (sidebarItems.length || activeVersion) { menuLevels.push({ label: translate('mobileMenu.previous', 'Previous'), type: MobileMenuType.PAGE, }); } return menuLevels; // eslint-disable-next-line react-hooks/exhaustive-deps }, [location]); return menuLevels; };