diff --git a/packages/docusaurus-theme-classic/src/__tests__/utils.test.js b/packages/docusaurus-theme-classic/src/__tests__/utils.test.js index 3c78736cafd7..bdae0c5259b4 100644 --- a/packages/docusaurus-theme-classic/src/__tests__/utils.test.js +++ b/packages/docusaurus-theme-classic/src/__tests__/utils.test.js @@ -19,4 +19,14 @@ describe('isSamePath', () => { test('should be false for compared path with double trailing slash', () => { expect(isSamePath('/docs', '/docs//')).toBeFalsy(); }); + + test('should be true for twice undefined/null', () => { + expect(isSamePath(undefined, undefined)).toBeTruthy(); + expect(isSamePath(undefined, undefined)).toBeTruthy(); + }); + + test('should be false when one undefined', () => { + expect(isSamePath('/docs', undefined)).toBeFalsy(); + expect(isSamePath(undefined, '/docs')).toBeFalsy(); + }); }); diff --git a/packages/docusaurus-theme-classic/src/theme/NavbarItem/DefaultNavbarItem.tsx b/packages/docusaurus-theme-classic/src/theme/NavbarItem/DefaultNavbarItem.tsx index 738fe0579882..2ba2a7e495bf 100644 --- a/packages/docusaurus-theme-classic/src/theme/NavbarItem/DefaultNavbarItem.tsx +++ b/packages/docusaurus-theme-classic/src/theme/NavbarItem/DefaultNavbarItem.tsx @@ -159,7 +159,7 @@ function NavItemMobile({ const menuListRef = useRef(null); const {pathname} = useLocation(); const [collapsed, setCollapsed] = useState( - () => !items?.filter((item) => item.to).some((item) => isSamePath(item.to, pathname)) ?? true, + () => !items?.some((item) => isSamePath(item.to, pathname)) ?? true, ); const navLinkClassNames = (extraClassName?: string, isSubList = false) => diff --git a/packages/docusaurus-theme-classic/src/utils/index.ts b/packages/docusaurus-theme-classic/src/utils/index.ts index 54cda35a8d60..d2b769cab124 100644 --- a/packages/docusaurus-theme-classic/src/utils/index.ts +++ b/packages/docusaurus-theme-classic/src/utils/index.ts @@ -6,7 +6,12 @@ */ // Compare the 2 paths, ignoring trailing / -export const isSamePath = (path1, path2) => { - const normalize = (str) => (str?.endsWith('/') ? str : `${str}/`); - return normalize(path1) === normalize(path2); +export const isSamePath = ( + path1: string | undefined, + path2: string | undefined, +) => { + const normalize = (pathname: string | undefined) => { + return !pathname || pathname?.endsWith('/') ? pathname : `${pathname}/`; + }; + return normalize(path1) === normalize(path2); };