@redocly/theme
Version:
Shared UI components lib
52 lines (43 loc) • 1.68 kB
text/typescript
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;
};