import React, { PropTypes } from 'react' import CSSModules from 'browser/lib/CSSModules' import styles from './RepositorySection.styl' import Repository from 'browser/lib/Repository' const electron = require('electron') const { remote } = electron const Menu = remote.Menu const MenuItem = remote.MenuItem class RepositorySection extends React.Component { constructor (props) { super(props) this.state = { isOpen: true, isCreatingFolder: false, isSaving: false, newFolder: { name: '' } } } getRepository () { let { repository } = this.props return Repository.find(repository.key) } handleUnlinkButtonClick () { let { dispatch, repository } = this.props this.getRepository() .then((repositoryInstance) => { return repositoryInstance.unmount() }) .then(() => { dispatch({ type: 'REMOVE_REPOSITORY', key: repository.key }) }) } handleToggleButtonClick (e) { this.setState({ isOpen: !this.state.isOpen }) } handleContextButtonClick (e) { var menu = new Menu() menu.append(new MenuItem({ label: 'New Folder', click: () => this.handleNewFolderButtonClick() })) menu.append(new MenuItem({ type: 'separator' })) menu.append(new MenuItem({ label: 'Unmount', click: () => this.handleUnlinkButtonClick() })) menu.popup(remote.getCurrentWindow()) } handleNewFolderButtonClick (e) { this.setState({ isCreatingFolder: true, newFolder: { name: 'New Folder' } }, () => { this.refs.nameInput.select() this.refs.nameInput.focus() }) } handleNewFolderFormChange (e) { let newFolder = this.state.newFolder newFolder.name = this.refs.nameInput.value this.setState({ newFolder }) } handleNameInputBlur (e) { let { dispatch, repository } = this.props this.getRepository() .then((repositoryInstance) => { return repositoryInstance.addFolder({ name: this.state.newFolder.name }) }) .then((folder) => { console.log(folder) dispatch({ type: 'ADD_FOLDER', key: repository.key, folder: folder }) this.setState({ isCreatingFolder: false, isSaving: false }) }) } render () { let { repository } = this.props let folderElements = repository.folders.map((folder) => { return (
{folder.name}
) }) let toggleButtonIconClassName = this.state.isOpen ? 'fa fa-minus' : 'fa fa-plus' return (
{repository.name}
{this.state.isOpen &&
{folderElements} {this.state.isCreatingFolder ?
this.handleNewFolderFormChange(e)} onBlur={(e) => this.handleNameInputBlur(e)} />
: }
}
) } } RepositorySection.propTypes = { repository: PropTypes.shape({ name: PropTypes.string, folders: PropTypes.arrayOf(PropTypes.shape({ name: PropTypes.string })) }), dispatch: PropTypes.func } export default CSSModules(RepositorySection, styles)