11/* eslint-disable max-classes-per-file */
2+ /* eslint-disable react/no-multi-comp */
23
4+ import { createMedia } from '@artsy/fresnel'
35import PropTypes from 'prop-types'
46import React , { Component } from 'react'
57import {
@@ -12,24 +14,22 @@ import {
1214 Image ,
1315 List ,
1416 Menu ,
15- Responsive ,
1617 Segment ,
1718 Sidebar ,
1819 Visibility ,
1920} from 'semantic-ui-react'
2021
21- // Heads up!
22- // We using React Static to prerender our docs with server side rendering, this is a quite simple solution.
23- // For more advanced usage please check Responsive docs under the "Usage" section.
24- const getWidth = ( ) => {
25- const isSSR = typeof window === 'undefined'
26-
27- return isSSR ? Responsive . onlyTablet . minWidth : window . innerWidth
28- }
22+ const { MediaContextProvider, Media } = createMedia ( {
23+ breakpoints : {
24+ mobile : 0 ,
25+ tablet : 768 ,
26+ computer : 1024 ,
27+ } ,
28+ } )
2929
30- /* eslint-disable react/no-multi-comp */
31- /* Heads up! HomepageHeading uses inline styling, however it's not the best practice. Use CSS or styled components for
32- * such things.
30+ /* Heads up!
31+ * HomepageHeading uses inline styling, however it's not the best practice. Use CSS or styled
32+ * components for such things.
3333 */
3434const HomepageHeading = ( { mobile } ) => (
3535 < Container text >
@@ -80,7 +80,7 @@ class DesktopContainer extends Component {
8080 const { fixed } = this . state
8181
8282 return (
83- < Responsive getWidth = { getWidth } minWidth = { Responsive . onlyTablet . minWidth } >
83+ < Media greaterThan = 'mobile' >
8484 < Visibility
8585 once = { false }
8686 onBottomPassed = { this . showFixedMenu }
@@ -121,7 +121,7 @@ class DesktopContainer extends Component {
121121 </ Visibility >
122122
123123 { children }
124- </ Responsive >
124+ </ Media >
125125 )
126126 }
127127}
@@ -142,57 +142,55 @@ class MobileContainer extends Component {
142142 const { sidebarOpened } = this . state
143143
144144 return (
145- < Responsive
146- as = { Sidebar . Pushable }
147- getWidth = { getWidth }
148- maxWidth = { Responsive . onlyMobile . maxWidth }
149- >
150- < Sidebar
151- as = { Menu }
152- animation = 'push'
153- inverted
154- onHide = { this . handleSidebarHide }
155- vertical
156- visible = { sidebarOpened }
157- >
158- < Menu . Item as = 'a' active >
159- Home
160- </ Menu . Item >
161- < Menu . Item as = 'a' > Work</ Menu . Item >
162- < Menu . Item as = 'a' > Company</ Menu . Item >
163- < Menu . Item as = 'a' > Careers</ Menu . Item >
164- < Menu . Item as = 'a' > Log in</ Menu . Item >
165- < Menu . Item as = 'a' > Sign Up</ Menu . Item >
166- </ Sidebar >
167-
168- < Sidebar . Pusher dimmed = { sidebarOpened } >
169- < Segment
145+ < Media as = { Sidebar . Pushable } at = 'mobile' >
146+ < Sidebar . Pushable >
147+ < Sidebar
148+ as = { Menu }
149+ animation = 'overlay'
170150 inverted
171- textAlign = 'center'
172- style = { { minHeight : 350 , padding : '1em 0em' } }
151+ onHide = { this . handleSidebarHide }
173152 vertical
153+ visible = { sidebarOpened }
174154 >
175- < Container >
176- < Menu inverted pointing secondary size = 'large' >
177- < Menu . Item onClick = { this . handleToggle } >
178- < Icon name = 'sidebar' />
179- </ Menu . Item >
180- < Menu . Item position = 'right' >
181- < Button as = 'a' inverted >
182- Log in
183- </ Button >
184- < Button as = 'a' inverted style = { { marginLeft : '0.5em' } } >
185- Sign Up
186- </ Button >
187- </ Menu . Item >
188- </ Menu >
189- </ Container >
190- < HomepageHeading mobile />
191- </ Segment >
155+ < Menu . Item as = 'a' active >
156+ Home
157+ </ Menu . Item >
158+ < Menu . Item as = 'a' > Work</ Menu . Item >
159+ < Menu . Item as = 'a' > Company</ Menu . Item >
160+ < Menu . Item as = 'a' > Careers</ Menu . Item >
161+ < Menu . Item as = 'a' > Log in</ Menu . Item >
162+ < Menu . Item as = 'a' > Sign Up</ Menu . Item >
163+ </ Sidebar >
164+
165+ < Sidebar . Pusher dimmed = { sidebarOpened } >
166+ < Segment
167+ inverted
168+ textAlign = 'center'
169+ style = { { minHeight : 350 , padding : '1em 0em' } }
170+ vertical
171+ >
172+ < Container >
173+ < Menu inverted pointing secondary size = 'large' >
174+ < Menu . Item onClick = { this . handleToggle } >
175+ < Icon name = 'sidebar' />
176+ </ Menu . Item >
177+ < Menu . Item position = 'right' >
178+ < Button as = 'a' inverted >
179+ Log in
180+ </ Button >
181+ < Button as = 'a' inverted style = { { marginLeft : '0.5em' } } >
182+ Sign Up
183+ </ Button >
184+ </ Menu . Item >
185+ </ Menu >
186+ </ Container >
187+ < HomepageHeading mobile />
188+ </ Segment >
192189
193- { children }
194- </ Sidebar . Pusher >
195- </ Responsive >
190+ { children }
191+ </ Sidebar . Pusher >
192+ </ Sidebar . Pushable >
193+ </ Media >
196194 )
197195 }
198196}
@@ -202,10 +200,14 @@ MobileContainer.propTypes = {
202200}
203201
204202const ResponsiveContainer = ( { children } ) => (
205- < div >
203+ /* Heads up!
204+ * For large applications it may not be best option to put all page into these containers at
205+ * they will be rendered twice for SSR.
206+ */
207+ < MediaContextProvider >
206208 < DesktopContainer > { children } </ DesktopContainer >
207209 < MobileContainer > { children } </ MobileContainer >
208- </ div >
210+ </ MediaContextProvider >
209211)
210212
211213ResponsiveContainer . propTypes = {
0 commit comments