diff --git a/src/theme/DocItem/Layout/MobileSidebarDrawer.tsx b/src/theme/DocItem/Layout/MobileSidebarDrawer.tsx index 6afb0acf14f1c..a55cca9a74581 100644 --- a/src/theme/DocItem/Layout/MobileSidebarDrawer.tsx +++ b/src/theme/DocItem/Layout/MobileSidebarDrawer.tsx @@ -1,4 +1,4 @@ -import React, { useEffect, useState, useCallback } from 'react'; +import React, { useEffect, useRef, useState, useCallback } from 'react'; import clsx from 'clsx'; import { useLocation } from '@docusaurus/router'; import { useDocsSidebar } from '@docusaurus/plugin-content-docs/client'; @@ -20,6 +20,7 @@ export default function MobileSidebarDrawer(): JSX.Element | null { const isZH = currentLocale === 'zh-CN'; const [open, setOpen] = useState(false); const [localeOpen, setLocaleOpen] = useState(false); + const localeContainerRef = useRef(null); const close = useCallback(() => setOpen(false), []); @@ -45,7 +46,12 @@ export default function MobileSidebarDrawer(): JSX.Element | null { useEffect(() => { if (!localeOpen) return undefined; - const onDocClick = () => setLocaleOpen(false); + const onDocClick = (e: MouseEvent) => { + const container = localeContainerRef.current; + if (container && !container.contains(e.target as Node)) { + setLocaleOpen(false); + } + }; document.addEventListener('mousedown', onDocClick); return () => document.removeEventListener('mousedown', onDocClick); }, [localeOpen]); @@ -59,8 +65,8 @@ export default function MobileSidebarDrawer(): JSX.Element | null {
e.stopPropagation()} >