import React, {Component, PropTypes} from 'react'; import {ipcRenderer} from 'electron'; import {bindActionCreators} from 'redux'; import {connect} from 'react-redux' import {shell} from 'electron'; import PromptButton from '../components/base/PromptButton'; import Dropdown from '../components/base/Dropdown'; import DropdownDivider from '../components/base/DropdownDivider'; import DropdownHint from '../components/base/DropdownHint'; import PromptModal from '../components/modals/PromptModal'; import AlertModal from '../components/modals/AlertModal'; import SettingsModal from '../components/modals/SettingsModal'; import ChangelogModal from '../components/modals/ChangelogModal'; import * as WorkspaceActions from '../redux/modules/workspaces'; import * as GlobalActions from '../redux/modules/global'; import * as db from '../../backend/database'; import {getAppVersion} from '../../backend/appInfo'; import {getModal} from '../components/modals/index'; class WorkspaceDropdown extends Component { async _promptUpdateName () { const workspace = this._getActiveWorkspace(this.props); const name = await getModal(PromptModal).show({ headerName: 'Rename Workspace', defaultValue: workspace.name }); db.workspace.update(workspace, {name}); } async _workspaceCreate () { const name = await getModal(PromptModal).show({ headerName: 'Create New Workspace', defaultValue: 'My Workspace', submitName: 'Create', selectText: true }); const workspace = await db.workspace.create({name}); this.props.actions.workspaces.activate(workspace); } async _workspaceRemove () { const count = await db.workspace.count(); if (count <= 1) { getModal(AlertModal).show({ message: 'You cannot delete your last workspace' }); } else { const workspace = this._getActiveWorkspace(this.props); db.workspace.remove(workspace); } } _getActiveWorkspace (props) { // TODO: Factor this out into a selector const {entities, workspaces} = props || this.props; let workspace = entities.workspaces[workspaces.activeId]; if (!workspace) { workspace = entities.workspaces[Object.keys(entities.workspaces)[0]]; } return workspace; } render () { const {className, actions, loading, entities, ...other} = this.props; const allWorkspaces = Object.keys(entities.workspaces).map(id => entities.workspaces[id]); const workspace = this._getActiveWorkspace(this.props); return ( ) } } WorkspaceDropdown.propTypes = { loading: PropTypes.bool.isRequired, workspaces: PropTypes.shape({ activeId: PropTypes.string }), entities: PropTypes.shape({ workspaces: PropTypes.object.isRequired }).isRequired, actions: PropTypes.shape({ workspaces: PropTypes.shape({ activate: PropTypes.func.isRequired, }), global: PropTypes.shape({ importFile: PropTypes.func.isRequired, exportFile: PropTypes.func.isRequired, }) }) }; function mapStateToProps (state) { return { workspaces: state.workspaces, entities: state.entities, actions: state.actions, loading: state.global.loading }; } function mapDispatchToProps (dispatch) { return { actions: { workspaces: bindActionCreators(WorkspaceActions, dispatch), global: bindActionCreators(GlobalActions, dispatch) } } } export default connect( mapStateToProps, mapDispatchToProps )(WorkspaceDropdown);