1
-
2
1
import React , { useState , useRef , useEffect } from "react" ;
3
2
import { useHistory } from "react-router-dom" ;
4
3
import Link from "@docusaurus/Link" ;
@@ -43,13 +42,13 @@ function DocsCategoryDropdown({ dropdownCategory }) {
43
42
} else {
44
43
// Align to center
45
44
left =
46
- triggerRect . left + triggerRect . width / 2 - dropdownRect . width / 2 ;
45
+ triggerRect . left + triggerRect . width / 2 - dropdownRect . width / 2 ;
47
46
}
48
47
49
48
// Ensure the dropdown doesn't go off-screen
50
49
left = Math . max (
51
- 10 ,
52
- Math . min ( left , viewportWidth - dropdownRect . width - 10 ) ,
50
+ 10 ,
51
+ Math . min ( left , viewportWidth - dropdownRect . width - 10 ) ,
53
52
) ;
54
53
55
54
setDropdownStyles ( {
@@ -68,69 +67,75 @@ function DocsCategoryDropdown({ dropdownCategory }) {
68
67
69
68
// Guard against undefined sidebar
70
69
const isSelected =
71
- sidebar && sidebar . name && dropdownCategory
72
- ? sidebar . name === dropdownCategory . customProps . sidebar
73
- : false ;
70
+ sidebar && sidebar . name && dropdownCategory
71
+ ? sidebar . name === dropdownCategory . customProps . sidebar
72
+ : false ;
74
73
75
74
return (
76
- < div
77
- className = { styles . docsNavDropdownContainer }
78
- onMouseEnter = { handleMouseEnter }
79
- onMouseLeave = { handleMouseLeave }
80
- >
75
+ < div
76
+ className = { styles . docsNavDropdownContainer }
77
+ onMouseEnter = { handleMouseEnter }
78
+ onMouseLeave = { handleMouseLeave }
79
+ >
81
80
< span
82
- className = { styles . docsNavDropdownToolbarLink }
83
- ref = { triggerRef } // Attach the ref to the individual link that triggers the dropdown
81
+ className = { styles . docsNavDropdownToolbarLink }
82
+ ref = { triggerRef } // Attach the ref to the individual link that triggers the dropdown
84
83
>
85
84
< Link
86
85
className = { `${ styles . docsNavDropdownToolbarTopLevelLink } ${ isSelected ? styles . docsNavSelected : ""
87
86
} `}
88
87
href = { dropdownCategory . customProps . href }
89
88
>
90
89
< Translate
91
- id = { `sidebar.dropdownCategories.category.${ dropdownCategory . label } ` }
92
- description = { `Translation for ${ dropdownCategory . label } ` }
90
+ id = { `sidebar.dropdownCategories.category.${ dropdownCategory . label } ` }
91
+ description = { `Translation for ${ dropdownCategory . label } ` }
93
92
>
94
93
{ dropdownCategory . label }
95
94
</ Translate >
96
95
</ Link > { " " }
97
96
< DropdownCaret />
98
97
</ span >
99
- { isOpen && (
100
- < DropdownContent
101
- dropdownCategory = { dropdownCategory }
102
- handleMouseLeave = { handleMouseLeave }
103
- dropdownStyles = { dropdownStyles } // Pass the dynamic styles to position the dropdown
104
- dropdownMenuRef = { dropdownMenuRef } // Pass the ref to the dropdown content
105
- />
106
- ) }
107
- </ div >
98
+ { isOpen && (
99
+ < DropdownContent
100
+ dropdownCategory = { dropdownCategory }
101
+ handleMouseLeave = { handleMouseLeave }
102
+ dropdownStyles = { dropdownStyles } // Pass the dynamic styles to position the dropdown
103
+ dropdownMenuRef = { dropdownMenuRef } // Pass the ref to the dropdown content
104
+ />
105
+ ) }
106
+ </ div >
108
107
) ;
109
108
}
110
109
111
110
export const DocsCategoryDropdownLinkOnly = ( { title, link } ) => {
112
111
return (
113
- < div className = { styles . docsNavDropdownContainer } >
114
- < Link href = { link } className = { styles . docsNavDropdownToolbarTopLevelLink } >
115
- < span > { title } </ span >
116
- </ Link >
117
- </ div >
112
+ < div className = { styles . docsNavDropdownContainer } >
113
+ < Link href = { link } className = { styles . docsNavDropdownToolbarTopLevelLink } >
114
+ < span > { title } </ span >
115
+ </ Link >
116
+ </ div >
118
117
) ;
119
118
} ;
120
119
121
120
const DropdownContent = ( {
122
- dropdownCategory,
123
- handleMouseLeave,
124
- dropdownStyles,
125
- dropdownMenuRef,
126
- } ) => {
121
+ dropdownCategory,
122
+ handleMouseLeave,
123
+ dropdownStyles,
124
+ dropdownMenuRef,
125
+ } ) => {
127
126
const [ hovered , setHovered ] = useState ( null ) ;
128
127
129
128
return (
129
+ < div
130
+ ref = { dropdownMenuRef }
131
+ className = { styles . docsNavDropdownMenu }
132
+ style = { { position : "fixed" , ...dropdownStyles } }
133
+ >
130
134
< div
131
- ref = { dropdownMenuRef }
132
- className = { styles . docsNavDropdownMenu }
133
- style = { { position : "fixed" , ...dropdownStyles } }
135
+ key = { 99 }
136
+ className = { `${ styles . docsNavMenuItem } ${ hovered === 99 ? styles . docsNavHovered : "" } ` }
137
+ onMouseEnter = { ( ) => setHovered ( 99 ) }
138
+ onMouseLeave = { ( ) => setHovered ( null ) }
134
139
>
135
140
< Link
136
141
to = { dropdownCategory . customProps . href }
@@ -161,23 +166,11 @@ const DropdownContent = ({
161
166
className = { `${ styles . docsNavMenuItem } ${ hovered === index ? styles . docsNavHovered : "" } ` }
162
167
onMouseEnter = { ( ) => setHovered ( index ) }
163
168
onMouseLeave = { ( ) => setHovered ( null ) }
164
- >
165
- < Link
166
- to = { dropdownCategory . customProps . href }
167
- className = { styles . docsNavMenuHeader }
168
- onClick = { handleMouseLeave }
169
169
>
170
- < Translate
171
- id = { `sidebar.dropdownCategories.category.${ dropdownCategory . label } ` }
172
- description = { `Translation for ${ dropdownCategory . label } ` }
173
- >
174
- { dropdownCategory . label }
175
- </ Translate >
176
- </ Link >
177
- < div className = { styles . docsNavMenuDescription } >
178
- < Translate
179
- id = { `sidebar.dropdownCategories.category.description.${ dropdownCategory . label } ` }
180
- description = { `Translation for ${ dropdownCategory . label } description` }
170
+ < Link
171
+ to = { item . href }
172
+ className = { styles . docsNavItemTitle }
173
+ onClick = { handleMouseLeave }
181
174
>
182
175
< Translate
183
176
id = { `sidebar.dropdownCategories.category.${ dropdownCategory . label } .${ item . label } ` }
@@ -197,42 +190,9 @@ const DropdownContent = ({
197
190
198
191
</ div >
199
192
</ div >
200
- </ div >
201
- < hr className = { styles . docsNavMenuDivider} / >
202
- < div className = { styles . docsNavMenuItems } >
203
- { dropdownCategory . items . map ( ( item , index ) => (
204
- < div
205
- key = { index }
206
- className = { `${ styles . docsNavMenuItem } ${ hovered === index ? styles . docsNavHovered : "" } ` }
207
- onMouseEnter = { ( ) => setHovered ( index ) }
208
- onMouseLeave = { ( ) => setHovered ( null ) }
209
- >
210
- < Link
211
- to = { item . href }
212
- className = { styles . docsNavItemTitle }
213
- onClick = { handleMouseLeave }
214
- >
215
- < Translate
216
- id = { `sidebar.dropdownCategories.category.${ dropdownCategory . label } .${ item . label } ` }
217
- description = { `Translation for ${ dropdownCategory . label } .${ item . label } ` }
218
- >
219
- { item . label }
220
- </ Translate >
221
-
222
- </ Link >
223
- < div className = { styles . docsNavItemDescription } >
224
- < Translate
225
- id = { `sidebar.dropdownCategories.category.${ dropdownCategory . label } .${ item . label } .description` }
226
- description = { `Translation for ${ dropdownCategory . label } .${ item . label } description` }
227
- >
228
- { item . description }
229
- </ Translate >
230
-
231
- </ div >
232
- </ div >
233
- ) ) }
234
- </ div >
193
+ ) ) }
235
194
</ div >
195
+ </ div >
236
196
) ;
237
197
} ;
238
198
@@ -251,20 +211,20 @@ const DropdownCaret = () => {
251
211
} ;
252
212
253
213
return (
254
- < span style = { { marginLeft : "8px" } } >
214
+ < span style = { { marginLeft : "8px" } } >
255
215
< svg
256
- xmlns = "http://www.w3.org/2000/svg"
257
- width = "6"
258
- height = "10"
259
- viewBox = "0 0 6 10"
260
- style = { rotatedIconStyle }
216
+ xmlns = "http://www.w3.org/2000/svg"
217
+ width = "6"
218
+ height = "10"
219
+ viewBox = "0 0 6 10"
220
+ style = { rotatedIconStyle }
261
221
>
262
222
< path
263
- stroke = "currentColor"
264
- strokeLinecap = "round"
265
- strokeLinejoin = "round"
266
- strokeWidth = "1.5"
267
- d = "M1 9L5 5 1 1"
223
+ stroke = "currentColor"
224
+ strokeLinecap = "round"
225
+ strokeLinejoin = "round"
226
+ strokeWidth = "1.5"
227
+ d = "M1 9L5 5 1 1"
268
228
/>
269
229
</ svg >
270
230
</ span >
0 commit comments