@@ -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,9 +65,7 @@ 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
@@ -80,15 +79,16 @@ function NavBar({ children }) {
8079 clearHideTimeout ( ) ;
8180 setDropdownOpen ( dropdown ) ;
8281 }
83- } )
82+ } ) ,
83+ toggleDropdownOpen
8484 } ) ,
85- [ setDropdownOpen , clearHideTimeout , handleBlur ]
85+ [ setDropdownOpen , toggleDropdownOpen , clearHideTimeout , handleBlur ]
8686 ) ;
8787
8888 return (
8989 < NavBarContext . Provider value = { contextValue } >
9090 < header >
91- < nav className = "nav" ref = { nodeRef } >
91+ < nav className = { className } ref = { nodeRef } >
9292 < MenuOpenContext . Provider value = { dropdownOpen } >
9393 { children }
9494 </ MenuOpenContext . Provider >
@@ -99,11 +99,13 @@ function NavBar({ children }) {
9999}
100100
101101NavBar . propTypes = {
102- children : PropTypes . node
102+ children : PropTypes . node ,
103+ className : PropTypes . string
103104} ;
104105
105106NavBar . defaultProps = {
106- children : null
107+ children : null ,
108+ className : 'nav'
107109} ;
108110
109111export default NavBar ;
0 commit comments