diff --git a/packages/docusaurus-theme-classic/src/theme/DocSidebar/index.tsx b/packages/docusaurus-theme-classic/src/theme/DocSidebar/index.tsx index 96a98a7028..0fb5307b8d 100644 --- a/packages/docusaurus-theme-classic/src/theme/DocSidebar/index.tsx +++ b/packages/docusaurus-theme-classic/src/theme/DocSidebar/index.tsx @@ -64,6 +64,16 @@ function DocSidebarItemCategory({ return isActive ? false : item.collapsed; }); + const menuListRef = useRef(null); + const [menuListHeight, setMenuListHeight] = useState( + undefined, + ); + const handleMenuListHeight = (calc = true) => { + setMenuListHeight( + calc ? `${menuListRef.current?.scrollHeight}px` : undefined, + ); + }; + // If we navigate to a category, it should automatically expand itself useEffect(() => { const justBecameActive = isActive && !wasActive; @@ -75,9 +85,14 @@ function DocSidebarItemCategory({ const handleItemClick = useCallback( (e) => { e.preventDefault(); - setCollapsed((state) => !state); + + if (!menuListHeight) { + handleMenuListHeight(); + } + + setTimeout(() => setCollapsed((state) => !state), 100); }, - [setCollapsed], + [menuListHeight], ); if (items.length === 0) { @@ -101,7 +116,17 @@ function DocSidebarItemCategory({ {...props}> {label} -