1
- import React from 'react'
1
+ import React , { useState , useEffect } from 'react'
2
2
import { Link } from 'gatsby'
3
3
import styled from '@emotion/styled'
4
+ import { Global , css } from '@emotion/core'
4
5
import { breakpoints , colors } from '../utils/variables'
5
6
import Hamburger from '../resources/hamburger.svg'
6
7
import Multiply from '../resources/multiply.svg'
@@ -12,6 +13,10 @@ const StyledNav = styled.div`
12
13
top : 0 ;
13
14
left : 0 ;
14
15
right : 0 ;
16
+
17
+ .white {
18
+ background : # fff ;
19
+ }
15
20
}
16
21
17
22
.nav {
@@ -23,15 +28,6 @@ const StyledNav = styled.div`
23
28
@media (max-width: ${ breakpoints . xmd } ) {
24
29
flex-direction : column;
25
30
padding-top : 0 ;
26
-
27
- .navIsRendered {
28
- display: flex;
29
- }
30
-
31
- .navIsNotRendered {
32
- display: none;
33
- }
34
-
35
31
& __header {
36
32
display : flex;
37
33
justify-content : space-between;
@@ -77,6 +73,10 @@ const StyledNav = styled.div`
77
73
width : 100% ;
78
74
z-index : 1000 ;
79
75
76
+ @media (min-width: ${ breakpoints . xmd } ) {
77
+ padding-top : 2.5rem ;
78
+ }
79
+
80
80
@media (max-width: ${ breakpoints . xmd } ) {
81
81
height : 95vh ;
82
82
flex-direction : column;
@@ -142,60 +142,87 @@ const StyledNav = styled.div`
142
142
.active {
143
143
color : ${ colors . blue } ;
144
144
}
145
+
146
+ @media (max-width: ${ breakpoints . xmd } ) {
147
+ .shown {
148
+ display : flex;
149
+ }
150
+
151
+ .hidden {
152
+ display : none;
153
+ }
154
+ }
145
155
`
146
156
147
- class Nav extends React . Component {
157
+ const Nav = ( { shouldRenderLogo } ) => {
158
+ const [ isNavRendered , setIsNavRendered ] = useState ( false )
148
159
149
- state = {
150
- isNavRendered : false ,
151
- }
160
+ useEffect ( ( ) => {
161
+ window . addEventListener ( 'resize' , ( ) => {
162
+ if ( window . innerWidth <= '700' ) {
163
+ setIsNavRendered ( false )
164
+ }
165
+ } )
166
+ } )
152
167
153
- toggleNavigation = ( ) => {
154
- this . setState ( { isNavRendered : ! this . state . isNavRendered } )
168
+ const toggleNavigation = ( ) => {
169
+ setIsNavRendered ( ! isNavRendered )
155
170
}
156
171
157
- render ( ) {
158
- const { shouldRenderLogo } = this . props
159
- return (
160
- < StyledNav >
161
- < nav className = "nav" style = { this . state . isNavRendered ? { background : '#fff' , height : '100vh' } : { } } >
162
- < div className = "nav__header" >
163
- { shouldRenderLogo ?
164
- < Link to = "/" className = "logo-container" >
165
- < img className = "logo" src = { TheiaLogoDark } alt = "theia logo" />
166
- </ Link > : < span aria-hidden = { true } > </ span >
172
+ return (
173
+ < StyledNav >
174
+ < Global
175
+ styles = { css `
176
+ html {
177
+ overflow-y : ${ isNavRendered ? 'hidden' : 'scroll' } ;
167
178
}
168
- < div className = "nav__button-container" >
169
- < button
170
- className = "nav__button"
171
- aria-label = "Navigation Toggle"
172
- onClick = { this . toggleNavigation }
173
- >
174
- { this . state . isNavRendered ? < img src = { Multiply } alt = "close menu icon" /> : < img src = { Hamburger } alt = "hamburger menu icon" /> }
175
- </ button >
176
- </ div >
179
+ ` }
180
+ />
181
+ < nav className = { `${ isNavRendered ? 'white' : '' } ` } >
182
+ < div className = "nav__header" >
183
+ { shouldRenderLogo ?
184
+ < Link to = "/" className = "logo-container" >
185
+ < img className = "logo" src = { TheiaLogoDark } alt = "theia logo" />
186
+ </ Link > : < span aria-hidden = { true } > </ span >
187
+ }
188
+ < div className = "nav__button-container" >
189
+ < button
190
+ className = "nav__button"
191
+ aria-label = "Navigation Toggle"
192
+ onClick = { toggleNavigation }
193
+ >
194
+ { isNavRendered ? < img src = { Multiply } alt = "close menu icon" /> : < img src = { Hamburger } alt = "hamburger menu icon" /> }
195
+ </ button >
177
196
</ div >
178
- < ul className = { `nav__items ${ this . state . isNavRendered ? 'navIsRendered' : 'navIsNotRendered' } ` } >
179
- < li className = "nav__item" >
180
- < Link to = "/#features" className = "nav__link" > Features</ Link >
181
- </ li >
182
- < li className = "nav__item" >
183
- < Link to = "/docs/" className = "nav__link" activeClassName = "active" > Documentation</ Link >
184
- </ li >
185
- < li className = "nav__item" >
186
- < a href = "https://spectrum.chat/theia" target = "_blank" rel = "noopener" className = "nav__link" > Community</ a >
187
- </ li >
188
- < li className = "nav__item" >
189
- < a href = "https://www.typefox.io/theia/" className = "nav__link" target = "_blank" rel = "noopener" > Support</ a >
190
- </ li >
191
- < li className = "nav__item" >
192
- < a href = "https://www.typefox.io/trainings/" className = "nav__link" target = "_blank" rel = "noopener" > Training</ a >
193
- </ li >
194
- </ ul >
195
- </ nav >
196
- </ StyledNav >
197
- )
198
- }
197
+ </ div >
198
+ < ul className = { `nav__items ${ isNavRendered ? 'shown' : 'hidden' } ` } >
199
+ < li className = "nav__item" >
200
+ < Link
201
+ to = "/#features"
202
+ className = "nav__link"
203
+ onClick = { ( ) => {
204
+ setIsNavRendered ( false )
205
+ } }
206
+ >
207
+ Features
208
+ </ Link >
209
+ </ li >
210
+ < li className = "nav__item" >
211
+ < Link to = "/docs/" className = "nav__link" activeClassName = "active" > Documentation</ Link >
212
+ </ li >
213
+ < li className = "nav__item" >
214
+ < a href = "https://spectrum.chat/theia" target = "_blank" rel = "noopener" className = "nav__link" > Community</ a >
215
+ </ li >
216
+ < li className = "nav__item" >
217
+ < a href = "https://www.typefox.io/theia/" className = "nav__link" target = "_blank" rel = "noopener" > Support</ a >
218
+ </ li >
219
+ < li className = "nav__item" >
220
+ < a href = "https://www.typefox.io/trainings/" className = "nav__link" target = "_blank" rel = "noopener" > Training</ a >
221
+ </ li >
222
+ </ ul >
223
+ </ nav >
224
+ </ StyledNav >
225
+ )
199
226
}
200
227
201
228
export default Nav
0 commit comments