diff --git a/e2e/fixtures/nav-link-item-with-hash/doc/index.mdx b/e2e/fixtures/nav-link-item-with-hash/doc/index.mdx index 5437d9816..a432730c0 100644 --- a/e2e/fixtures/nav-link-item-with-hash/doc/index.mdx +++ b/e2e/fixtures/nav-link-item-with-hash/doc/index.mdx @@ -5,3 +5,4 @@ pageType: custom
contentA
contentB
+
contentC
diff --git a/e2e/fixtures/nav-link-item-with-hash/rspress.config.ts b/e2e/fixtures/nav-link-item-with-hash/rspress.config.ts index e5d9fa813..3f651736a 100644 --- a/e2e/fixtures/nav-link-item-with-hash/rspress.config.ts +++ b/e2e/fixtures/nav-link-item-with-hash/rspress.config.ts @@ -18,6 +18,11 @@ export default defineConfig({ link: '#pageB', position: 'right', }, + { + text: 'PageC', + link: '#pageC', + position: 'right', + }, ], }, }); diff --git a/e2e/tests/nav-link-item-with-hash.test.ts b/e2e/tests/nav-link-item-with-hash.test.ts index 1c5fdb540..e51fbee93 100644 --- a/e2e/tests/nav-link-item-with-hash.test.ts +++ b/e2e/tests/nav-link-item-with-hash.test.ts @@ -28,4 +28,18 @@ test.describe('basic test', async () => { await page.locator('.rspress-nav-menu a').nth(1).click(); expect(page.url()).toContain('index#pageB'); }); + + test('Close the hamburger menu when clicking on an item in mobile view', async ({ + page, + }) => { + await page.setViewportSize({ width: 375, height: 812 }); + + await page.goto(`http://localhost:${appPort}/`); + + await page.locator('.rspress-mobile-hamburger').click(); + await expect(page.locator('.rspress-nav-screen')).toBeVisible(); + + await page.getByRole('link', { name: 'PageC' }).click(); + await expect(page.locator('.rspress-nav-screen')).not.toBeVisible(); + }); }); diff --git a/packages/theme-default/src/components/Link/index.tsx b/packages/theme-default/src/components/Link/index.tsx index d083d25fb..604cf392b 100644 --- a/packages/theme-default/src/components/Link/index.tsx +++ b/packages/theme-default/src/components/Link/index.tsx @@ -97,7 +97,10 @@ export function Link(props: LinkProps) { className={`${styles.link} ${className} cursor-pointer`} rel={rel} target={target} - onClick={handleNavigate} + onClick={event => { + rest.onClick?.(event); + handleNavigate(event); + }} href={withBaseUrl} > {children} diff --git a/packages/theme-default/src/components/Nav/NavMenuSingleItem.tsx b/packages/theme-default/src/components/Nav/NavMenuSingleItem.tsx index e651c67b2..d4cc5111c 100644 --- a/packages/theme-default/src/components/Nav/NavMenuSingleItem.tsx +++ b/packages/theme-default/src/components/Nav/NavMenuSingleItem.tsx @@ -13,6 +13,7 @@ interface Props { base: string; rightIcon?: React.ReactNode; compact?: boolean; + onClick?: () => void; } export function NavMenuSingleItem( @@ -24,7 +25,7 @@ export function NavMenuSingleItem( ); return ( - +
- menuItem.position ?? DEFAULT_NAV_POSTION; + menuItem.position ?? DEFAULT_NAV_POSITION; // eslint-disable-next-line react/prop-types const leftMenuItems = menuItems.filter(item => getPosition(item) === 'left'); // eslint-disable-next-line react/prop-types diff --git a/packages/theme-default/src/components/NavHambmger/index.tsx b/packages/theme-default/src/components/NavHambmger/index.tsx index e0331ecd6..908a0833b 100644 --- a/packages/theme-default/src/components/NavHambmger/index.tsx +++ b/packages/theme-default/src/components/NavHambmger/index.tsx @@ -18,13 +18,14 @@ export function NavHamburger(props: Props) {