Moved sidebar to its own component

This commit is contained in:
Jori Lallo
2016-08-05 18:37:21 +03:00
parent c753382571
commit 6dca99f948
5 changed files with 105 additions and 75 deletions

View File

@@ -1,7 +1,7 @@
import React, { PropTypes } from 'react'; import React, { PropTypes } from 'react';
import { toJS } from 'mobx';
import { Link, browserHistory } from 'react-router'; import { Link, browserHistory } from 'react-router';
import { observer } from 'mobx-react'; import { observer } from 'mobx-react';
import { toJS } from 'mobx';
import keydown from 'react-keydown'; import keydown from 'react-keydown';
import _ from 'lodash'; import _ from 'lodash';
@@ -14,14 +14,12 @@ import AtlasPreviewLoading from 'components/AtlasPreviewLoading';
import CenteredContent from 'components/CenteredContent'; import CenteredContent from 'components/CenteredContent';
import Document from 'components/Document'; import Document from 'components/Document';
import DropdownMenu, { MenuItem, MoreIcon } from 'components/DropdownMenu'; import DropdownMenu, { MenuItem, MoreIcon } from 'components/DropdownMenu';
import Flex from 'components/Flex'; import { Flex } from 'reflexbox';
import Tree from 'components/Tree'; import Sidebar from './components/Sidebar';
import styles from './DocumentScene.scss'; import styles from './DocumentScene.scss';
import classNames from 'classnames/bind'; // import classNames from 'classnames/bind';
const cx = classNames.bind(styles); // const cx = classNames.bind(styles);
import treeStyles from 'components/Tree/Tree.scss';
@keydown(['cmd+/', 'ctrl+/', 'c', 'e']) @keydown(['cmd+/', 'ctrl+/', 'c', 'e'])
@observer(['ui', 'cache']) @observer(['ui', 'cache'])
@@ -59,7 +57,7 @@ class DocumentScene extends React.Component {
const key = nextProps.keydown.event; const key = nextProps.keydown.event;
if (key) { if (key) {
if (key.key === '/' && (key.metaKey || key.ctrl.Key)) { if (key.key === '/' && (key.metaKey || key.ctrl.Key)) {
this.toggleSidebar(); this.props.ui.toggleSidebar();
} }
if (key.key === 'c') { if (key.key === 'c') {
@@ -123,18 +121,6 @@ class DocumentScene extends React.Component {
a.click(); a.click();
} }
toggleSidebar = () => {
this.props.ui.toggleSidebar();
}
renderNode = (node) => {
return (
<span className={ treeStyles.nodeLabel } onClick={ this.onClickNode.bind(null, node) }>
{ node.module.name }
</span>
);
}
render() { render() {
const { const {
sidebar, sidebar,
@@ -179,33 +165,15 @@ class DocumentScene extends React.Component {
<AtlasPreviewLoading /> <AtlasPreviewLoading />
</CenteredContent> </CenteredContent>
) : ( ) : (
<Flex flex> <Flex auto>
{ this.store.isCollection && ( { this.store.isCollection && (
<Flex> <Sidebar
{ sidebar && ( open={ sidebar }
<div className={ cx(styles.sidebar) }> onToggle={ this.props.ui.toggleSidebar }
<Tree navigationTree={ toJS(this.store.collectionTree) }
paddingLeft={ 10 } onNavigationUpdate={ this.store.updateNavigationTree }
tree={ toJS(this.store.collectionTree) } onNodeCollapse={ this.store.onNodeCollapse }
onChange={ this.store.updateNavigationTree } />
onCollapse={ this.store.onNodeCollapse }
isNodeCollapsed={ this.isNodeCollapsed }
renderNode={ this.renderNode }
/>
</div>
) }
<div
onClick={ this.toggleSidebar }
className={ styles.sidebarToggle }
title="Toggle sidebar (Cmd+/)"
>
<img
src={ require("assets/icons/menu.svg") }
className={ styles.menuIcon }
alt="Menu"
/>
</div>
</Flex>
) } ) }
<Flex flex justify="center" className={ styles.content }> <Flex flex justify="center" className={ styles.content }>
<CenteredContent> <CenteredContent>

View File

@@ -3,35 +3,6 @@
flex-direction: row; flex-direction: row;
} }
.sidebar {
width: 250px;
padding: 20px 20px 20px 5px;
border-right: 1px solid #eee;
}
.content { .content {
position: relative; position: relative;
} }
.sidebarToggle {
display: flex;
position: relative;
width: 60px;
cursor: pointer;
justify-content: center;
&:hover {
background-color: #f5f5f5;
.menuIcon {
opacity: 1;
}
}
}
.menuIcon {
margin-top: 18px;
height: 28px;
opacity: 0.15;
}

View File

@@ -0,0 +1,61 @@
import React, { PropTypes } from 'react';
import { observer } from 'mobx-react';
import { Flex } from 'reflexbox';
import Tree from 'components/Tree';
import styles from './Sidebar.scss';
import classNames from 'classnames/bind';
const cx = classNames.bind(styles);
import treeStyles from 'components/Tree/Tree.scss';
@observer
class Sidebar extends React.Component {
static propTypes = {
open: PropTypes.bool,
onToggle: PropTypes.func.isRequired,
navigationTree: PropTypes.object.isRequired,
onNavigationUpdate: PropTypes.func.isRequired,
onNodeCollapse: PropTypes.func.isRequired,
}
renderNode = (node) => {
return (
<span className={ treeStyles.nodeLabel } onClick={ this.onClickNode.bind(null, node) }>
{ node.module.name }
</span>
);
}
render() {
return (
<Flex>
{ this.props.open && (
<div className={ cx(styles.sidebar) }>
<Tree
paddingLeft={ 10 }
tree={ this.props.navigationTree }
onChange={ this.props.onNavigationUpdate }
onCollapse={ this.props.onNodeCollapse }
renderNode={ this.renderNode }
/>
</div>
) }
<div
onClick={ this.props.onToggle }
className={ styles.sidebarToggle }
title="Toggle sidebar (Cmd+/)"
>
<img
src={ require("assets/icons/menu.svg") }
className={ styles.menuIcon }
alt="Menu"
/>
</div>
</Flex>
);
}
}
export default Sidebar;

View File

@@ -0,0 +1,28 @@
.sidebar {
width: 250px;
padding: 20px 20px 20px 5px;
border-right: 1px solid #eee;
}
.sidebarToggle {
display: flex;
position: relative;
width: 60px;
cursor: pointer;
justify-content: center;
&:hover {
background-color: #f5f5f5;
.menuIcon {
opacity: 1;
}
}
}
.menuIcon {
margin-top: 18px;
height: 28px;
opacity: 0.15;
}

View File

@@ -0,0 +1,2 @@
import Sidebar from './Sidebar';
export default Sidebar;