@@ -58,15 +58,18 @@ export default function SearchGlobal({ keyword }) {
58
58
const [ windowWidth , setWindowWidth ] = React . useState ( window . innerWidth ) ;
59
59
const [ orderBy , setOrderBy ] = React . useState ( config . DEFAULT_SORT_ORDER ) ;
60
60
const [ totalPages , setTotalPages ] = React . useState ( 0 ) ;
61
+ const dropdownRef = React . useRef ( null ) ;
61
62
62
63
const prevOrderBy = usePrevious ( orderBy ) ;
63
64
64
65
const usersPerPage = config . ITEMS_PER_PAGE ;
65
66
66
67
React . useEffect ( ( ) => {
67
68
window . addEventListener ( "resize" , updateWindowDimensions ) ;
69
+ window . addEventListener ( "click" , onWholeContentClick ) ;
68
70
return ( ) => {
69
71
window . removeEventListener ( "resize" , updateWindowDimensions ) ;
72
+ window . removeEventListener ( "click" , onWholeContentClick ) ;
70
73
} ;
71
74
} ) ;
72
75
@@ -237,6 +240,7 @@ export default function SearchGlobal({ keyword }) {
237
240
} ) ;
238
241
239
242
setUsers ( data ) ;
243
+ setSortByDropdownShown ( false ) ;
240
244
setTotalResults ( Number ( headers [ "x-total" ] ) ) ;
241
245
setTotalPages ( Number ( headers [ "x-total-pages" ] ) ) ;
242
246
}
@@ -255,6 +259,12 @@ export default function SearchGlobal({ keyword }) {
255
259
const updateWindowDimensions = ( ) => {
256
260
setWindowWidth ( window . innerWidth ) ;
257
261
} ;
262
+
263
+ const onWholeContentClick = ( evt ) => {
264
+ if ( dropdownRef . current && ! dropdownRef . current . contains ( evt . target ) ) {
265
+ setSortByDropdownShown ( false ) ;
266
+ }
267
+ }
258
268
259
269
return (
260
270
< >
@@ -273,6 +283,7 @@ export default function SearchGlobal({ keyword }) {
273
283
</ div >
274
284
< div
275
285
className = { style . sort }
286
+ ref = { dropdownRef }
276
287
onClick = { ( ) => setSortByDropdownShown ( ! sortByDropdownShown ) }
277
288
style = { {
278
289
marginRight :
0 commit comments