import React, { PropTypes } from 'react' import CSSModules from 'browser/lib/CSSModules' import styles from './NewRepositoryModal.styl' import linkState from 'browser/lib/linkState' import RepositoryManager from 'browser/lib/RepositoryManager' import store from 'browser/main/store' import actions from 'browser/main/actions' const electron = require('electron') const remote = electron.remote function browseFolder () { let dialog = remote.dialog let defaultPath = remote.app.getHomeDir() return new Promise((resolve, reject) => { dialog.showOpenDialog({ title: 'Select Directory', defaultPath, properties: ['openDirectory', 'createDirectory'] }, function (targetPaths) { if (targetPaths == null) return resolve('') resolve(targetPaths[0]) }) }) } class NewRepositoryModal extends React.Component { constructor (props) { super(props) this.state = { name: '', path: '', isPathSectionFocused: false, error: null, isBrowsingPath: false } } handleCloseButtonClick (e) { this.props.close() } handlePathFocus (e) { this.setState({ isPathSectionFocused: true }) } handlePathBlur (e) { if (e.relatedTarget !== this.refs.pathInput && e.relatedTarget !== this.refs.browseButton) { this.setState({ isPathSectionFocused: false }) } } handleBrowseButtonClick (e) { this.setState({ isBrowsingPath: true }, () => { browseFolder() .then((targetPath) => { this.setState({ path: targetPath, isBrowsingPath: false }) }) .catch((err) => { console.error('BrowseFAILED') console.error(err) this.setState({ isBrowsingPath: false }) }) }) } handleConfirmButtonClick (e) { let targetPath = this.state.path let name = this.state.name RepositoryManager .addRepo({ targetPath, name }) .then((newRepo) => { store.dispatch(actions.addRepo(newRepo)) this.props.close() }) .catch((err) => { console.error(err) this.setState({ error: err.message }) }) } render () { return (
New Repository
Repository Name
Repository Path
this.handlePathFocus(e)} onBlur={(e) => this.handlePathBlur(e)} disabled={this.state.isBrowsingPath} />
{ this.state.error != null && (
{this.state.error}
) }
) } } NewRepositoryModal.propTypes = { close: PropTypes.func } NewRepositoryModal.prototype.linkState = linkState export default CSSModules(NewRepositoryModal, styles)