1- import React , { useEffect , useState , useCallback } from 'react' ;
1+ import React , { useEffect , useRef , useState , useCallback } from 'react' ;
22import clsx from 'clsx' ;
33import { useLocation } from '@docusaurus/router' ;
44import { useDocsSidebar } from '@docusaurus/plugin-content-docs/client' ;
@@ -20,6 +20,7 @@ export default function MobileSidebarDrawer(): JSX.Element | null {
2020 const isZH = currentLocale === 'zh-CN' ;
2121 const [ open , setOpen ] = useState ( false ) ;
2222 const [ localeOpen , setLocaleOpen ] = useState ( false ) ;
23+ const localeContainerRef = useRef < HTMLDivElement > ( null ) ;
2324
2425 const close = useCallback ( ( ) => setOpen ( false ) , [ ] ) ;
2526
@@ -45,7 +46,12 @@ export default function MobileSidebarDrawer(): JSX.Element | null {
4546
4647 useEffect ( ( ) => {
4748 if ( ! localeOpen ) return undefined ;
48- const onDocClick = ( ) => setLocaleOpen ( false ) ;
49+ const onDocClick = ( e : MouseEvent ) => {
50+ const container = localeContainerRef . current ;
51+ if ( container && ! container . contains ( e . target as Node ) ) {
52+ setLocaleOpen ( false ) ;
53+ }
54+ } ;
4955 document . addEventListener ( 'mousedown' , onDocClick ) ;
5056 return ( ) => document . removeEventListener ( 'mousedown' , onDocClick ) ;
5157 } , [ localeOpen ] ) ;
@@ -59,8 +65,8 @@ export default function MobileSidebarDrawer(): JSX.Element | null {
5965 < SearchBar />
6066 </ div >
6167 < div
68+ ref = { localeContainerRef }
6269 className = { clsx ( styles . toolbarLocale , localeOpen && styles . toolbarLocaleOpen ) }
63- onMouseDown = { e => e . stopPropagation ( ) }
6470 >
6571 < button
6672 type = "button"
@@ -87,10 +93,10 @@ export default function MobileSidebarDrawer(): JSX.Element | null {
8793 </ button >
8894 < ul className = { styles . localeMenu } role = "menu" >
8995 { locales . map ( locale => {
90- const baseTo = `pathname:// ${ alternatePageUtils . createUrl ( {
96+ const baseTo = alternatePageUtils . createUrl ( {
9197 locale,
9298 fullyQualified : false ,
93- } ) } ` ;
99+ } ) ;
94100 const to = `${ baseTo } ${ search } ${ hash } ` ;
95101 return (
96102 < li key = { locale } role = "none" >
0 commit comments