UNPKG

admin-on-rest-fr05t1k

Version:

A frontend Framework for building admin applications on top of REST services, using ES6, React and Material UI

63 lines (56 loc) 1.95 kB
import React, { PureComponent, PropTypes } from 'react'; import { connect } from 'react-redux'; import Drawer from 'material-ui/Drawer'; import Paper from 'material-ui/Paper'; import Responsive from './Responsive'; import { setSidebarVisibility as setSidebarVisibilityAction } from '../../actions'; const styles = { sidebarOpen: { flex: '0 0 16em', marginLeft: 0, order: -1, transition: 'margin 450ms cubic-bezier(0.23, 1, 0.32, 1) 0ms', }, sidebarClosed: { flex: '0 0 16em', marginLeft: '-16em', order: -1, transition: 'margin 450ms cubic-bezier(0.23, 1, 0.32, 1) 0ms', }, }; // We shouldn't need PureComponent here as it's connected // but for some reason it keeps rendering even though mapStateToProps returns the same object class Sidebar extends PureComponent { handleClose = () => { this.props.setSidebarVisibility(false); } render() { const { open, setSidebarVisibility, children } = this.props; return ( <Responsive small={ <Drawer docked={false} open={open} onRequestChange={setSidebarVisibility}> {React.cloneElement(children, { onMenuTap: this.handleClose })} </Drawer> } medium={ <Paper style={open ? styles.sidebarOpen : styles.sidebarClosed}> {children} </Paper> } /> ) } } Sidebar.propTypes = { setSidebarVisibility: PropTypes.func.isRequired, open: PropTypes.bool, }; const mapStateToProps = (state, props) => ({ open: state.admin.ui.sidebarOpen, locale: state.locale, // force redraw on locale change theme: props.theme, // force redraw on theme changes }); export default connect(mapStateToProps, { setSidebarVisibility: setSidebarVisibilityAction, })(Sidebar);