@@ -59,17 +59,21 @@ function Navbar(): JSX.Element {
59
59
} ,
60
60
} = useDocusaurusContext ( ) ;
61
61
const { path : homePath } = useActiveVersion ( ) ;
62
- const [ navbarSidebarOpen , setNavbarSidebarOpen ] = useState ( false ) ;
62
+ const [ ] = useState ( false ) ;
63
63
const {
64
+ mobileNavbarSidebarOpen,
65
+ setMobileNavbarSidebarOpen,
64
66
mobileSidebarOpen,
65
67
setMobileSidebarOpen,
66
68
setMobileSidebarLoaded,
69
+ setMobileNavbarSidebarLoaded,
70
+ mobileNavbarSidebarLoaded,
67
71
} = useDocStateContext ( ) ;
68
72
const { isDarkTheme, setLightTheme, setDarkTheme } = useThemeContext ( ) ;
69
73
const { navbarRef, isNavbarVisible } = useHideableNavbar ( hideOnScroll ) ;
70
74
71
75
useLockBodyScroll ( mobileSidebarOpen ) ;
72
- useLockBodyScroll ( navbarSidebarOpen ) ;
76
+ useLockBodyScroll ( mobileNavbarSidebarOpen ) ;
73
77
74
78
const showSidebar = useCallback ( ( ) => {
75
79
setMobileSidebarLoaded ( true ) ;
@@ -80,10 +84,11 @@ function Navbar(): JSX.Element {
80
84
} , [ ] ) ;
81
85
82
86
const showNavbarSidebar = useCallback ( ( ) => {
83
- setNavbarSidebarOpen ( true ) ;
87
+ setMobileNavbarSidebarLoaded ( true ) ;
88
+ setMobileNavbarSidebarOpen ( true ) ;
84
89
} , [ ] ) ;
85
90
const hideNavbarSidebar = useCallback ( ( ) => {
86
- setNavbarSidebarOpen ( false ) ;
91
+ setMobileNavbarSidebarOpen ( false ) ;
87
92
} , [ ] ) ;
88
93
89
94
const onToggleChange = useCallback (
@@ -93,6 +98,9 @@ function Navbar(): JSX.Element {
93
98
94
99
const windowSize = useWindowSize ( ) ;
95
100
101
+ const shouldLoadNavbarSidebar =
102
+ mobileNavbarSidebarLoaded && windowSize === windowSizes . mobile ;
103
+
96
104
useEffect ( ( ) => {
97
105
if ( windowSize === windowSizes . desktop ) {
98
106
hideSidebar ( ) ;
@@ -109,7 +117,7 @@ function Navbar(): JSX.Element {
109
117
className = { clsx ( 'navbar' , 'navbar--fixed-top' , {
110
118
'navbar--dark' : style === 'dark' ,
111
119
'navbar--primary' : style === 'primary' ,
112
- 'navbar-sidebar--show' : navbarSidebarOpen ,
120
+ 'navbar-sidebar--show' : mobileNavbarSidebarOpen ,
113
121
[ styles . navbarHideable ] : hideOnScroll ,
114
122
[ styles . navbarHidden ] : hideOnScroll && ! isNavbarVisible ,
115
123
} ) }
@@ -123,7 +131,6 @@ function Navbar(): JSX.Element {
123
131
type = "button"
124
132
tabIndex = { 0 }
125
133
onClick = { showSidebar }
126
- onKeyDown = { showSidebar }
127
134
onMouseEnter = { ( ) => setMobileSidebarLoaded ( true ) }
128
135
>
129
136
< IconMenu />
@@ -161,7 +168,7 @@ function Navbar(): JSX.Element {
161
168
{ windowSize === windowSizes . mobile && (
162
169
< button
163
170
aria-label = {
164
- navbarSidebarOpen
171
+ mobileNavbarSidebarOpen
165
172
? translate ( {
166
173
id : 'theme.docs.sidebar.responsiveCloseButtonLabel' ,
167
174
message : 'Close menu' ,
@@ -181,6 +188,7 @@ function Navbar(): JSX.Element {
181
188
styles . navbarSidebarToggle ,
182
189
) }
183
190
onClick = { showNavbarSidebar }
191
+ onMouseEnter = { ( ) => setMobileNavbarSidebarLoaded ( true ) }
184
192
>
185
193
⋮
186
194
</ button >
@@ -191,37 +199,39 @@ function Navbar(): JSX.Element {
191
199
hideSidebar ( ) ;
192
200
hideNavbarSidebar ( ) ;
193
201
} }
194
- visible = { mobileSidebarOpen || navbarSidebarOpen }
202
+ visible = { mobileSidebarOpen || mobileNavbarSidebarOpen }
195
203
/>
196
- < div className = { clsx ( 'navbar-sidebar' , styles . navbarSidebar ) } >
197
- < div className = "navbar-sidebar__brand" >
198
- < Link to = { homePath } >
199
- < Logo
200
- className = "navbar__brand"
201
- imageClassName = "navbar__logo"
202
- titleClassName = "navbar__title"
203
- onClick = { hideSidebar }
204
- />
205
- </ Link >
206
- { ! disableColorModeSwitch && (
207
- < Toggle checked = { isDarkTheme } onChange = { onToggleChange } />
208
- ) }
209
- </ div >
210
- < div className = "navbar-sidebar__items" >
211
- < div className = "menu" >
212
- < ul className = "menu__list" >
213
- { items . map ( ( item , i ) => (
214
- < NavbarItem
215
- mobile
216
- { ...( item as any ) } // TODO fix typing
217
- onClick = { hideSidebar }
218
- key = { i }
219
- />
220
- ) ) }
221
- </ ul >
204
+ { shouldLoadNavbarSidebar && (
205
+ < div className = { clsx ( 'navbar-sidebar' , styles . navbarSidebar ) } >
206
+ < div className = "navbar-sidebar__brand" >
207
+ < Link to = { homePath } >
208
+ < Logo
209
+ className = "navbar__brand"
210
+ imageClassName = "navbar__logo"
211
+ titleClassName = "navbar__title"
212
+ onClick = { hideSidebar }
213
+ />
214
+ </ Link >
215
+ { ! disableColorModeSwitch && (
216
+ < Toggle checked = { isDarkTheme } onChange = { onToggleChange } />
217
+ ) }
218
+ </ div >
219
+ < div className = "navbar-sidebar__items" >
220
+ < div className = "menu" >
221
+ < ul className = "menu__list" >
222
+ { items . map ( ( item , i ) => (
223
+ < NavbarItem
224
+ mobile
225
+ { ...( item as any ) } // TODO fix typing
226
+ onClick = { hideSidebar }
227
+ key = { i }
228
+ />
229
+ ) ) }
230
+ </ ul >
231
+ </ div >
222
232
</ div >
223
233
</ div >
224
- </ div >
234
+ ) }
225
235
</ nav >
226
236
) ;
227
237
}
0 commit comments