diff --git a/editor/layout/index.js b/editor/layout/index.js index 2084cf532f43c..b041cff0527c0 100644 --- a/editor/layout/index.js +++ b/editor/layout/index.js @@ -30,47 +30,11 @@ import { getNotices, } from '../selectors'; -const MOBILE_WIDTH = 762; - class Layout extends Component { - constructor() { - super( ...arguments ); - this.onUpdateDimensions = this.onUpdateDimensions.bind( this ); - this.saveLastWindowWidth = this.saveLastWindowWidth.bind( this ); - this.state = { - lastWindowWidth: null, - }; - } - - saveLastWindowWidth() { - this.setState( { - lastWindowWidth: window.innerWidth, - } ); - } - - onUpdateDimensions() { - if ( this.props.isSidebarOpened && - this.state.lastWindowWidth > MOBILE_WIDTH && - window.innerWidth < MOBILE_WIDTH - ) { + componentWillReceiveProps( nextProps ) { + if ( nextProps.isSidebarOpened && nextProps.isMobile && ! this.props.isMobile ) { this.props.toggleSidebar(); } - this.saveLastWindowWidth(); - } - - componentDidMount() { - if ( window ) { - if ( ! this.state.lastWindowWidth ) { - this.saveLastWindowWidth(); - } - window.addEventListener( 'resize', this.onUpdateDimensions ); - } - } - - componentWillUnmount() { - if ( window ) { - window.removeEventListener( 'resize', this.onUpdateDimensions ); - } } render() { @@ -106,6 +70,7 @@ export default connect( mode: getEditorMode( state ), isSidebarOpened: isEditorSidebarOpened( state ), notices: getNotices( state ), + isMobile: ! state.responsive.greaterThan.small, } ), { removeNotice, toggleSidebar } )( navigateRegions( Layout ) ); diff --git a/editor/reducer.js b/editor/reducer.js index 66a7d4e84f9b3..f731cb80fd975 100644 --- a/editor/reducer.js +++ b/editor/reducer.js @@ -3,6 +3,7 @@ */ import optimist from 'redux-optimist'; import { combineReducers } from 'redux'; +import { createResponsiveStateReducer } from 'redux-responsive'; import { difference, get, @@ -637,6 +638,14 @@ export function metaBoxes( state = defaultMetaBoxState, action ) { } } +// Create responsive reducer with lib default breakpoints excluding small where we are currently using 782. +const responsive = createResponsiveStateReducer( { + extraSmall: 480, + small: 782, + medium: 992, + large: 1200, +} ); + export default optimist( combineReducers( { editor, currentPost, @@ -650,4 +659,5 @@ export default optimist( combineReducers( { saving, notices, metaBoxes, + responsive, } ) ); diff --git a/editor/store.js b/editor/store.js index fa2e7db7dfc7c..81b1f78796d1e 100644 --- a/editor/store.js +++ b/editor/store.js @@ -5,6 +5,7 @@ import { applyMiddleware, createStore } from 'redux'; import refx from 'refx'; import multi from 'redux-multi'; import { flowRight } from 'lodash'; +import { responsiveStoreEnhancer } from 'redux-responsive'; /** * Internal dependencies @@ -27,6 +28,7 @@ function createReduxStore() { const enhancers = [ applyMiddleware( multi, refx( effects ) ), storePersist( 'preferences', GUTENBERG_PREFERENCES_KEY ), + responsiveStoreEnhancer, ]; if ( window.__REDUX_DEVTOOLS_EXTENSION__ ) { diff --git a/package.json b/package.json index 64ae2138afba8..a1394594a162a 100644 --- a/package.json +++ b/package.json @@ -41,6 +41,7 @@ "redux": "3.7.2", "redux-multi": "0.1.12", "redux-optimist": "0.0.2", + "redux-responsive": "4.3.4", "refx": "2.1.0", "rememo": "2.3.3", "showdown": "1.7.4",