@@ -12,55 +12,77 @@ import "./InfoBox.scss";
1212const TRANSITION_SPEED = 500 ;
1313
1414export default function InfoBox ( { desc, displayMode, title, url } ) {
15- const [ hidden , setHidden ] = useState ( true ) ;
15+ const [ closed , setClosed ] = useState ( true ) ;
1616
1717 const ref = useRef ( null ) ;
1818
19+ const setKeyboardUser = ( e ) => {
20+ const body = document . body ;
21+
22+ if ( e . keyCode === 9 ) {
23+ body . classList . add ( "using-keyboard" ) ;
24+ }
25+ } ;
26+
27+ useEffect ( ( ) => {
28+ const map = document . getElementsByClassName ( "leaflet-container" ) [ 0 ] ;
29+
30+ map . addEventListener ( "keyup" , setKeyboardUser ) ;
31+
32+ return ( ) => {
33+ map . removeEventListener ( "keyup" , setKeyboardUser ) ;
34+ } ;
35+ } , [ ] ) ;
36+
1937 useEffect ( ( ) => {
2038 const intro = document . querySelector ( ".leaflet-control-zoom" ) ;
2139 const height = ref . current . clientHeight ;
2240
2341 if ( ! height || ! intro ) return ;
2442
25- if ( hidden ) {
43+ if ( closed ) {
2644 intro . style . transition = "margin 300ms" ;
2745 intro . style . marginBottom = "80px" ; // .leaflet-bottom .leaflet-control in App.scss
2846 } else {
2947 intro . style . transition = "margin 300ms 200ms" ;
3048 intro . style . marginBottom = `${ height + 64 } px` ;
3149 }
32- } , [ hidden ] ) ;
50+ } , [ closed ] ) ;
3351
3452 useEffect ( ( ) => {
3553 const body = document . body ;
3654 body . classList . add ( "overflow-hidden" ) ;
3755
3856 const map = document . getElementsByClassName ( "leaflet-container" ) [ 0 ] ;
3957
40- const handleClick = ( ) => {
41- setHidden ( ! hidden ) ;
58+ const handleMapClick = ( ) => {
59+ setClosed ( ! closed ) ;
4260 } ;
4361
44- if ( hidden ) {
45- map . removeEventListener ( "click" , handleClick ) ;
46- map . removeEventListener ( "touchstart" , handleClick ) ;
47- map . removeEventListener ( "touchmove" , handleClick ) ;
48- return ;
62+ if ( closed ) {
63+ document . querySelector ( ".leaflet-container" ) . focus ( ) ;
64+ map . removeEventListener ( "click" , handleMapClick ) ;
65+ map . removeEventListener ( "touchstart" , handleMapClick ) ;
66+ map . removeEventListener ( "touchmove" , handleMapClick ) ;
67+ } else {
68+ map . addEventListener ( "click" , handleMapClick ) ;
69+ map . addEventListener ( "touchstart" , handleMapClick ) ;
70+ map . addEventListener ( "touchmove" , handleMapClick ) ;
4971 }
5072
51- window . setTimeout ( ( ) => {
52- map . addEventListener ( "click" , handleClick ) ;
53- map . addEventListener ( "touchstart" , handleClick ) ;
54- map . addEventListener ( "touchmove" , handleClick ) ;
55- } , 100 ) ;
56- } , [ hidden ] ) ;
73+ return ( ) => {
74+ map . removeEventListener ( "click" , handleMapClick ) ;
75+ map . removeEventListener ( "touchstart" , handleMapClick ) ;
76+ map . removeEventListener ( "touchmove" , handleMapClick ) ;
77+ } ;
78+ } , [ closed ] ) ;
5779
5880 return (
59- < CSSTransition in = { ! hidden } timeout = { TRANSITION_SPEED } >
81+ < CSSTransition in = { ! closed } timeout = { TRANSITION_SPEED } >
6082 < div >
6183 < InfoButton
6284 displayMode = { displayMode }
63- handleClick = { ( ) => setHidden ( ! hidden ) }
85+ handleClick = { ( ) => setClosed ( ! closed ) }
6486 />
6587 < div ref = { ref } className = { classNames ( "info-wrapper" , displayMode ) } >
6688 < div className = "info-title" >
0 commit comments