diff --git a/packages/docusaurus-theme-classic/src/theme/DocPage/index.tsx b/packages/docusaurus-theme-classic/src/theme/DocPage/index.tsx index 187cbee809d3..defe49b14c43 100644 --- a/packages/docusaurus-theme-classic/src/theme/DocPage/index.tsx +++ b/packages/docusaurus-theme-classic/src/theme/DocPage/index.tsx @@ -38,7 +38,7 @@ function DocPageContent({ const {pluginId, permalinkToSidebar, docsSidebars, version} = versionMetadata; const sidebarName = permalinkToSidebar[currentDocRoute.path]; const sidebar = docsSidebars[sidebarName]; - + console.log(sidebar); const [hiddenSidebarContainer, setHiddenSidebarContainer] = useState(false); const [hiddenSidebar, setHiddenSidebar] = useState(false); const toggleSidebar = useCallback(() => { diff --git a/packages/docusaurus-theme-classic/src/theme/DocSidebar/index.tsx b/packages/docusaurus-theme-classic/src/theme/DocSidebar/index.tsx index fa7a51b8301e..9b77aac3fc54 100644 --- a/packages/docusaurus-theme-classic/src/theme/DocSidebar/index.tsx +++ b/packages/docusaurus-theme-classic/src/theme/DocSidebar/index.tsx @@ -29,6 +29,10 @@ function usePrevious(value) { return ref.current; } +function sleep(ms: number) { + return new Promise((resolve) => setTimeout(resolve, ms)); +} + const isActiveSidebarItem = (item, activePath) => { if (item.type === 'link') { return isSamePath(item.href, activePath); @@ -46,6 +50,7 @@ function DocSidebarItemCategory({ onItemClick, collapsible, activePath, + link, ...props }) { const {items, label} = item; @@ -61,6 +66,7 @@ function DocSidebarItemCategory({ } return isActive ? false : item.collapsed; }); + const [initialLink, setInitialLink] = useState(''); const menuListRef = useRef(null); const [menuListHeight, setMenuListHeight] = useState( @@ -78,17 +84,32 @@ function DocSidebarItemCategory({ if (justBecameActive && collapsed) { setCollapsed(false); } + if (link && !collapsed) { + for (const i in items) { + if (items.hasOwnProperty(i)) { + const childItem = items[i]; + if (childItem.type === 'link') { + if (link.id.includes(childItem.label.toLowerCase())) { + setInitialLink(childItem.href); + } + } + } + } + } }, [isActive, wasActive, collapsed]); const handleItemClick = useCallback( - (e) => { - e.preventDefault(); - + async (e) => { + if (!collapsed) { + e.preventDefault(); + } if (!menuListHeight) { handleMenuListHeight(); } - - setTimeout(() => setCollapsed((state) => !state), 100); + setCollapsed((state) => { + return !state; + }); + await sleep(100); }, [menuListHeight], ); @@ -103,17 +124,27 @@ function DocSidebarItemCategory({ 'menu__list-item--collapsed': collapsed, })} key={label}> - {label} - +