UNPKG

hyper-manager

Version:

The ultimate and most complete extension to manage all your connections in one place for Hyper.js

334 lines (295 loc) 7.74 kB
import React, { Component, PropTypes } from 'react' import RestartDialog from '../components/RestartDialog' import ParameterDialog from '../components/ParameterDialog' import GroupDialog from '../components/GroupDialog' import ServerDialog from '../components/ServerDialog' import Modes from '../constants/modes' class Main extends Component { constructor(props, context) { super(props, context) this.state = { restartOpen: false, parameterOpen: false, groupOpen: false, groupMode: Modes.Add, group: {}, serverOpen: false, serverMode: Modes.Add, server: {}, options: {} } this.onOptionsCancel = this.onOptionsCancel.bind(this) this.onOptionsSave = this.onOptionsSave.bind(this) this.onRestartOk = this.onRestartOk.bind(this) this.onGroupAdd = this.onGroupAdd.bind(this) this.onGroupDuplicate = this.onGroupDuplicate.bind(this) this.onGroupModify = this.onGroupModify.bind(this) this.onGroupDelete = this.onGroupDelete.bind(this) this.onGroupCancel = this.onGroupCancel.bind(this) this.onGroupSave = this.onGroupSave.bind(this) this.onServerAdd = this.onServerAdd.bind(this) this.onConnectionDuplicate = this.onConnectionDuplicate.bind(this) this.onServerModify = this.onServerModify.bind(this) this.onServerDelete = this.onServerDelete.bind(this) this.onServerCancel = this.onServerCancel.bind(this) this.onServerSave = this.onServerSave.bind(this) window.rpc.on('manager-open', (options) => { //console.log('on:manager-open', options) this.open(options) }) } open(options) { this.setState({ parameterOpen: true, groupOpen: false, serverOpen: false, options }) } generateId(length) { let radom13chars = function () { return Math.random().toString(16).substring(2, 15) } let loops = Math.ceil(length / 13) return new Array(loops).fill(radom13chars).reduce((string, func) => { return string + func() }, '').substring(0, length) } getGroups() { return _.get(this.state, 'options.groups', []) } getGroupById(groupId) { const groups = this.getGroups() return groups.find((group) => { return group.id == groupId }) } getConnections() { return _.get(this.state, 'options.servers', []) } getConnectionById(connectionId) { const connections = this.getConnections() return connections.find((connection) => { return connection.id == connectionId }) } onGroupAdd() { this.setState({ groupOpen: true, groupMode: Modes.Add, serverOpen: false, group: {} }) } onGroupDuplicate(groupId) { this.setState({ groupOpen: true, groupMode: Modes.Duplicate, group: _.clone(this.getGroupById(groupId)) }) } onGroupModify(groupId) { this.setState({ groupOpen: true, groupMode: Modes.Modify, group: this.getGroupById(groupId) }) } onGroupDelete(groupIds) { var options = _.cloneDeep(this.state.options) _.remove(options.servers, (oServer) => { return _.find(groupIds, (id) => { return oServer.groupId == id }) }) _.remove(options.groups, (oGroup) => { return _.find(groupIds, (id) => { return oGroup.id == id }) }) this.setState({ options }) } closeGroupDialog() { this.setState({ groupOpen: false }) } onGroupCancel() { this.closeGroupDialog() } onGroupSave(group) { var options = _.cloneDeep(this.state.options) switch (this.state.groupMode) { case Modes.Add: case Modes.Duplicate: group.id = this.generateId(8) options.groups.push(group) break case Modes.Modify: const index = _.findIndex(options.group, (oGroup) => { return oGroup.id == group.id }) options.groups[index] = group break } this.setState({ groupOpen: false, options }) } onServerAdd() { this.setState({ serverOpen: true, serverMode: Modes.Add, groupOpen: false, server: {} }) } onConnectionDuplicate(connectionId) { this.setState({ serverOpen: true, serverMode: Modes.Duplicate, groupOpen: false, server: _.clone(this.getConnectionById(connectionId)) }) } onServerModify(connectionId) { this.setState({ serverOpen: true, serverMode: Modes.Modify, groupOpen: false, server: this.getConnectionById(connectionId) }) } onServerDelete(serverIds) { var options = _.cloneDeep(this.state.options) _.remove(options.servers, (oServer) => { return _.find(serverIds, (id) => { return oServer.id == id }) }) this.setState({ options }) } closeServerDialog() { this.setState({ serverOpen: false }) } onServerCancel() { this.closeServerDialog() } onServerSave(server) { var options = _.cloneDeep(this.state.options) switch (this.state.serverMode) { case Modes.Add: case Modes.Duplicate: server.id = this.generateId(8) options.servers.push(server) break case Modes.Modify: const index = _.findIndex(options.server, (oServer) => { return oServer.id == server.id }) options.servers[index] = server break } this.setState({ serverOpen: false, options }) } updateOptions(options) { window.rpc.emit('manager-save', options) this.showRestartDialog(true) } closeOptionsDialog() { this.setState({ parameterOpen: false }) } onOptionsCancel() { this.closeOptionsDialog() } onOptionsSave(options) { this.closeOptionsDialog() this.updateOptions(options) } showRestartDialog(visible) { this.setState({ restartOpen: visible }) } onRestartOk(e) { this.showRestartDialog(false) } render() { const { restartOpen, parameterOpen, options, groupOpen, groupMode, group, serverOpen, serverMode, server, } = this.state var hosts = _.map(options.servers, (server) => { return { title: _.get(server, 'host', '') } }) hosts = _.filter(hosts, (host) => { return host.title }) hosts = _.uniqBy(hosts, (host) => { return host.title }) return ( <div className="hyper-manager"> <RestartDialog open={restartOpen} options={options} onOk={this.onRestartOk} /> <ParameterDialog open={parameterOpen} options={options} onCancel={this.onOptionsCancel} onSave={this.onOptionsSave} onGroupAdd={this.onGroupAdd} onGroupDuplicate={this.onGroupDuplicate} onGroupModify={this.onGroupModify} onGroupDelete={this.onGroupDelete} onServerAdd={this.onServerAdd} onConnectionDuplicate={this.onConnectionDuplicate} onServerModify={this.onServerModify} onServerDelete={this.onServerDelete} /> <GroupDialog open={groupOpen} options={options} mode={groupMode} group={group} onCancel={this.onGroupCancel} onSave={this.onGroupSave} /> <ServerDialog open={serverOpen} options={options} mode={serverMode} server={server} hosts={hosts} groups={options.groups} onCancel={this.onServerCancel} onSave={this.onServerSave} /> </div> ) } } export default Main