@@ -6,9 +6,10 @@ import React, {
66 useRef ,
77 useState
88} from 'react' ;
9+ import useKeyDownHandlers from '../../modules/IDE/hooks/useKeyDownHandlers' ;
910import { MenuOpenContext , NavBarContext } from './contexts' ;
1011
11- function NavBar ( { children } ) {
12+ function NavBar ( { children, className } ) {
1213 const [ dropdownOpen , setDropdownOpen ] = useState ( 'none' ) ;
1314
1415 const timerRef = useRef ( null ) ;
@@ -31,18 +32,9 @@ function NavBar({ children }) {
3132 } ;
3233 } , [ nodeRef , setDropdownOpen ] ) ;
3334
34- // TODO: replace with `useKeyDownHandlers` after #2052 is merged
35- useEffect ( ( ) => {
36- function handleKeyDown ( e ) {
37- if ( e . keyCode === 27 ) {
38- setDropdownOpen ( 'none' ) ;
39- }
40- }
41- document . addEventListener ( 'keydown' , handleKeyDown , false ) ;
42- return ( ) => {
43- document . removeEventListener ( 'keydown' , handleKeyDown , false ) ;
44- } ;
45- } , [ setDropdownOpen ] ) ;
35+ useKeyDownHandlers ( {
36+ escape : ( ) => setDropdownOpen ( 'none' )
37+ } ) ;
4638
4739 const clearHideTimeout = useCallback ( ( ) => {
4840 if ( timerRef . current ) {
@@ -55,6 +47,15 @@ function NavBar({ children }) {
5547 timerRef . current = setTimeout ( ( ) => setDropdownOpen ( 'none' ) , 10 ) ;
5648 } , [ timerRef , setDropdownOpen ] ) ;
5749
50+ const toggleDropdownOpen = useCallback (
51+ ( dropdown ) => {
52+ setDropdownOpen ( ( prevState ) =>
53+ prevState === dropdown ? 'none' : dropdown
54+ ) ;
55+ } ,
56+ [ setDropdownOpen ]
57+ ) ;
58+
5859 const contextValue = useMemo (
5960 ( ) => ( {
6061 createDropdownHandlers : ( dropdown ) => ( {
@@ -64,31 +65,33 @@ function NavBar({ children }) {
6465 ) ;
6566 } ,
6667 onClick : ( ) => {
67- setDropdownOpen ( ( prevState ) =>
68- prevState === 'none' ? dropdown : 'none'
69- ) ;
68+ toggleDropdownOpen ( dropdown ) ;
7069 } ,
7170 onBlur : handleBlur ,
7271 onFocus : clearHideTimeout
7372 } ) ,
7473 createMenuItemHandlers : ( dropdown ) => ( {
75- onMouseUp : ( ) => {
74+ onMouseUp : ( e ) => {
75+ if ( e . button === 2 ) {
76+ return ;
77+ }
7678 setDropdownOpen ( 'none' ) ;
7779 } ,
7880 onBlur : handleBlur ,
7981 onFocus : ( ) => {
8082 clearHideTimeout ( ) ;
8183 setDropdownOpen ( dropdown ) ;
8284 }
83- } )
85+ } ) ,
86+ toggleDropdownOpen
8487 } ) ,
85- [ setDropdownOpen , clearHideTimeout , handleBlur ]
88+ [ setDropdownOpen , toggleDropdownOpen , clearHideTimeout , handleBlur ]
8689 ) ;
8790
8891 return (
8992 < NavBarContext . Provider value = { contextValue } >
9093 < header >
91- < nav className = "nav" ref = { nodeRef } >
94+ < nav className = { className } ref = { nodeRef } >
9295 < MenuOpenContext . Provider value = { dropdownOpen } >
9396 { children }
9497 </ MenuOpenContext . Provider >
@@ -99,11 +102,13 @@ function NavBar({ children }) {
99102}
100103
101104NavBar . propTypes = {
102- children : PropTypes . node
105+ children : PropTypes . node ,
106+ className : PropTypes . string
103107} ;
104108
105109NavBar . defaultProps = {
106- children : null
110+ children : null ,
111+ className : 'nav'
107112} ;
108113
109114export default NavBar ;
0 commit comments