import React, {useState} from 'react'; import clsx from 'clsx'; import { useThemeConfig, useAnnouncementBar, MobileSecondaryMenuFiller, ThemeClassNames, useScrollPosition, useWindowSize, } from '@docusaurus/theme-common'; import Logo from '@theme/Logo'; import IconArrow from '@theme/IconArrow'; import {translate} from '@docusaurus/Translate'; import {DocSidebarItems} from '@theme/DocSidebarItem'; import styles from './styles.module.css'; import SidebarAd from '../../components/SidebarAd'; import CarbonAd from '../../components/CarbonAd'; function useShowAnnouncementBar() { const {isActive} = useAnnouncementBar(); const [showAnnouncementBar, setShowAnnouncementBar] = useState(isActive); useScrollPosition( ({scrollY}) => { if (isActive) { setShowAnnouncementBar(scrollY === 0); } }, [isActive], ); return isActive && showAnnouncementBar; } function HideableSidebarButton({onClick}) { return ( ); } function DocSidebarDesktop({path, sidebar, onCollapse, isHidden}) { const showAnnouncementBar = useShowAnnouncementBar(); const { navbar: {hideOnScroll}, hideableSidebar, } = useThemeConfig(); return (
{hideOnScroll && } {hideableSidebar && }
); } const DocSidebarMobileSecondaryMenu = ({toggleSidebar, sidebar, path}) => { return ( ); }; function DocSidebarMobile(props) { return ( ); } const DocSidebarDesktopMemo = React.memo(DocSidebarDesktop); const DocSidebarMobileMemo = React.memo(DocSidebarMobile); export default function DocSidebar(props) { const windowSize = useWindowSize(); // Desktop sidebar visible on hydration: need SSR rendering const shouldRenderSidebarDesktop = windowSize === 'desktop' || windowSize === 'ssr'; // Mobile sidebar not visible on hydration: can avoid SSR rendering const shouldRenderSidebarMobile = windowSize === 'mobile'; return ( <> {shouldRenderSidebarDesktop && } {shouldRenderSidebarMobile && } ); }