import PropTypes from 'prop-types' import React from 'react' import CSSModules from 'browser/lib/CSSModules' import styles from './StorageItem.styl' import consts from 'browser/lib/consts' import dataApi from 'browser/main/lib/dataApi' import store from 'browser/main/store' import FolderList from './FolderList' import i18n from 'browser/lib/i18n' const { shell, remote } = require('electron') const { dialog } = remote class StorageItem extends React.Component { constructor (props) { super(props) this.state = { isLabelEditing: false } } handleNewFolderButtonClick (e) { const { storage } = this.props const input = { name: 'Untitled', color: consts.FOLDER_COLORS[Math.floor(Math.random() * 7) % 7] } dataApi.createFolder(storage.key, input) .then((data) => { store.dispatch({ type: 'UPDATE_FOLDER', storage: data.storage }) }) .catch((err) => { console.error(err) }) } handleExternalButtonClick () { const { storage } = this.props shell.showItemInFolder(storage.path) } handleUnlinkButtonClick (e) { const index = dialog.showMessageBox(remote.getCurrentWindow(), { type: 'warning', message: i18n.__('Unlink Storage'), detail: i18n.__('Unlinking removes this linked storage from Boostnote. No data is removed, please manually delete the folder from your hard drive if needed.'), buttons: [i18n.__('Unlink'), i18n.__('Cancel')] }) if (index === 0) { const { storage } = this.props dataApi.removeStorage(storage.key) .then(() => { store.dispatch({ type: 'REMOVE_STORAGE', storageKey: storage.key }) }) .catch((err) => { throw err }) } } handleLabelClick (e) { const { storage } = this.props this.setState({ isLabelEditing: true, name: storage.name }, () => { this.refs.label.focus() }) } handleLabelChange (e) { this.setState({ name: this.refs.label.value }) } handleLabelBlur (e) { const { storage } = this.props dataApi .renameStorage(storage.key, this.state.name) .then((_storage) => { store.dispatch({ type: 'RENAME_STORAGE', storage: _storage }) this.setState({ isLabelEditing: false }) }) } render () { const { storage, hostBoundingBox } = this.props return (
{this.state.isLabelEditing ?
this.handleLabelChange(e)} onBlur={(e) => this.handleLabelBlur(e)} />
:
this.handleLabelClick(e)} >   {storage.name}  ({storage.path}) 
}
) } } StorageItem.propTypes = { hostBoundingBox: PropTypes.shape({ bottom: PropTypes.number, height: PropTypes.number, left: PropTypes.number, right: PropTypes.number, top: PropTypes.number, width: PropTypes.number }), storage: PropTypes.shape({ key: PropTypes.string }) } export default CSSModules(StorageItem, styles)