feat(pool/actions): add SR, add VM and disconnect server (#2308)

Fixes #2307
This commit is contained in:
Pierre Donias
2017-08-31 17:50:59 +02:00
committed by Julien Fontanet
parent 289112af27
commit b44017ca95

View File

@@ -1,41 +1,78 @@
import _ from 'intl'
import ActionBar, { Action } from 'action-bar'
import Component from 'base-component'
import React from 'react'
import { createGetObjectsOfType, createSelector } from 'selectors'
import {
addHostToPool
find
} from 'lodash'
import {
addSubscriptions,
connectStore,
noop
} from 'utils'
import {
addHostToPool,
disconnectServer,
subscribeServers
} from 'xo'
const NOT_IMPLEMENTED = () => {
throw new Error('not implemented')
}
@connectStore({
hosts: createGetObjectsOfType('host')
})
@addSubscriptions({
servers: subscribeServers
})
export default class PoolActionBar extends Component {
_getMasterAddress = createSelector(
() => this.props.pool && this.props.pool.master,
() => this.props.hosts,
(poolMaster, hosts) => {
const master = find(hosts, { id: poolMaster })
const PoolActionBar = ({ pool }) => (
<ActionBar
display='icon'
handlerParam={pool}
>
<Action
handler={NOT_IMPLEMENTED}
icon='add-sr'
label={_('addSrLabel')}
redirectOnSuccess={`new/sr?host=${pool.master}`}
/>
<Action
handler={NOT_IMPLEMENTED}
icon='add-vm'
label={_('addVmLabel')}
redirectOnSuccess={`vms/new?pool=${pool.id}`}
/>
<Action
handler={addHostToPool}
icon='add-host'
label={_('addHostLabel')}
/>
<Action
handler={NOT_IMPLEMENTED} // TODO disconnect server
icon='disconnect'
label={_('disconnectServer')}
/>
</ActionBar>
)
export default PoolActionBar
return master && master.address
}
)
_getServer = createSelector(
this._getMasterAddress,
() => this.props.servers,
(masterAddress, servers) => find(servers, { host: masterAddress })
)
_disconnectServer = () =>
disconnectServer(this._getServer())
render () {
const { pool } = this.props
return <ActionBar
display='icon'
handlerParam={pool}
>
<Action
handler={noop}
icon='add-sr'
label={_('addSrLabel')}
redirectOnSuccess={`new/sr?host=${pool.master}`}
/>
<Action
handler={noop}
icon='add-vm'
label={_('addVmLabel')}
redirectOnSuccess={`vms/new?pool=${pool.id}`}
/>
<Action
handler={addHostToPool}
icon='add-host'
label={_('addHostLabel')}
/>
<Action
handler={this._disconnectServer}
icon='disconnect'
label={_('disconnectServer')}
redirectOnSuccess='/home'
/>
</ActionBar>
}
}