fix(theme): only render secondaryMenu if it should be shown (#10705)

Co-authored-by: sebastien <lorber.sebastien@gmail.com>
This commit is contained in:
Hidde de Vries 2025-02-27 16:39:03 +01:00 committed by GitHub
parent 396deedba4
commit a6ef3897e0
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -5,19 +5,37 @@
* LICENSE file in the root directory of this source tree.
*/
import React, {type ReactNode} from 'react';
import React, {version, type ReactNode} from 'react';
import clsx from 'clsx';
import {useNavbarSecondaryMenu} from '@docusaurus/theme-common/internal';
import {ThemeClassNames} from '@docusaurus/theme-common';
import type {Props} from '@theme/Navbar/MobileSidebar/Layout';
function NavbarMobileSidebarPanel({children}: {children: ReactNode}) {
// TODO Docusaurus v4: remove temporary inert workaround
// See https://github.com/facebook/react/issues/17157
// See https://github.com/radix-ui/themes/pull/509
function inertProps(inert: boolean) {
const isBeforeReact19 = parseInt(version!.split('.')[0]!, 10) < 19;
if (isBeforeReact19) {
return {inert: inert ? '' : undefined};
}
return {inert};
}
function NavbarMobileSidebarPanel({
children,
inert,
}: {
children: ReactNode;
inert: boolean;
}) {
return (
<div
className={clsx(
ThemeClassNames.layout.navbar.mobileSidebar.panel,
'navbar-sidebar__item menu',
)}>
)}
{...inertProps(inert)}>
{children}
</div>
);
@ -40,8 +58,12 @@ export default function NavbarMobileSidebarLayout({
className={clsx('navbar-sidebar__items', {
'navbar-sidebar__items--show-secondary': secondaryMenuShown,
})}>
<NavbarMobileSidebarPanel>{primaryMenu}</NavbarMobileSidebarPanel>
<NavbarMobileSidebarPanel>{secondaryMenu}</NavbarMobileSidebarPanel>
<NavbarMobileSidebarPanel inert={secondaryMenuShown}>
{primaryMenu}
</NavbarMobileSidebarPanel>
<NavbarMobileSidebarPanel inert={!secondaryMenuShown}>
{secondaryMenu}
</NavbarMobileSidebarPanel>
</div>
</div>
);