import React, { PropTypes } from 'react' import CSSModules from 'browser/lib/CSSModules' import styles from './StoragesTab.styl' import dataApi from 'browser/main/lib/dataApi' import StorageItem from './StorageItem' const electron = require('electron') const remote = electron.remote function browseFolder () { let dialog = remote.dialog let defaultPath = remote.app.getPath('home') 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 StoragesTab extends React.Component { constructor (props) { super(props) this.state = { page: 'LIST', newStorage: { name: 'Unnamed', type: 'FILESYSTEM', path: '' } } } handleAddStorageButton (e) { this.setState({ page: 'ADD_STORAGE', newStorage: { name: 'Unnamed', type: 'FILESYSTEM', path: '' } }, () => { this.refs.addStorageName.select() }) } renderList () { let { storages, boundingBox } = this.props if (!boundingBox) { return null } let storageList = storages.map((storage) => { return }) return (
{storageList.length > 0 ? storageList :
No storage found.
}
) } handleAddStorageBrowseButtonClick (e) { browseFolder() .then((targetPath) => { if (targetPath.length > 0) { let { newStorage } = this.state newStorage.path = targetPath this.setState({ newStorage }) } }) .catch((err) => { console.error('BrowseFAILED') console.error(err) }) } handleAddStorageChange (e) { let { newStorage } = this.state newStorage.name = this.refs.addStorageName.value newStorage.path = this.refs.addStoragePath.value this.setState({ newStorage }) } handleAddStorageCreateButton (e) { dataApi .addStorage({ name: this.state.newStorage.name, path: this.state.newStorage.path }) .then((data) => { let { dispatch } = this.props dispatch({ type: 'ADD_STORAGE', storage: data.storage, notes: data.notes }) this.setState({ page: 'LIST' }) }) } handleAddStorageCancelButton (e) { this.setState({ page: 'LIST' }) } renderAddStorage () { return (
Add Storage
Name
this.handleAddStorageChange(e)} />
Type
3rd party cloud integration(such as Google Drive and Dropbox) will be available soon.
Location
this.handleAddStorageChange(e)} />
) } renderContent () { switch (this.state.page) { case 'ADD_STORAGE': case 'ADD_FOLDER': return this.renderAddStorage() case 'LIST': default: return this.renderList() } } render () { return (
{this.renderContent()}
) } } StoragesTab.propTypes = { boundingBox: PropTypes.shape({ bottom: PropTypes.number, height: PropTypes.number, left: PropTypes.number, right: PropTypes.number, top: PropTypes.number, width: PropTypes.number }), dispatch: PropTypes.func } export default CSSModules(StoragesTab, styles)