import React, { PropTypes } from 'react' import CSSModules from 'browser/lib/CSSModules' import styles from './Main.styl' import { connect } from 'react-redux' import SideNav from './SideNav' import TopBar from './TopBar' import NoteList from './NoteList' import Detail from './Detail' import dataApi from 'browser/main/lib/dataApi' import StatusBar from './StatusBar' import _ from 'lodash' import ConfigManager from 'browser/main/lib/ConfigManager' import modal from 'browser/main/lib/modal' import InitModal from 'browser/main/modals/InitModal' import ipc from 'browser/main/lib/ipc' class Main extends React.Component { constructor (props) { super(props) let { config } = props this.state = { isSliderFocused: false, listWidth: config.listWidth } } componentDidMount () { let { dispatch } = this.props // Reload all data dataApi.init() .then((data) => { dispatch({ type: 'INIT_ALL', storages: data.storages, notes: data.notes }) if (data.storages.length < 1) { modal.open(InitModal) } }) } handleSlideMouseDown (e) { e.preventDefault() this.setState({ isSliderFocused: true }) } handleMouseUp (e) { if (this.state.isSliderFocused) { this.setState({ isSliderFocused: false }, () => { let { dispatch } = this.props let newListWidth = this.state.listWidth // TODO: ConfigManager should dispatch itself. ConfigManager.set({listWidth: newListWidth}) dispatch({ type: 'SET_LIST_WIDTH', listWidth: newListWidth }) }) } } handleMouseMove (e) { if (this.state.isSliderFocused) { let offset = this.refs.body.getBoundingClientRect().left let newListWidth = e.pageX - offset if (newListWidth < 10) { newListWidth = 10 } else if (newListWidth > 600) { newListWidth = 600 } this.setState({ listWidth: newListWidth }) } } render () { let { config } = this.props return (