feat(xo-web/new-vm): hide IP field if IP pools are not configured (#2811)

Fixes #2739
This commit is contained in:
Pierre Donias 2018-03-29 17:19:38 +02:00 committed by Julien Fontanet
parent b47789bf82
commit b3d8ce2041

View File

@ -41,6 +41,7 @@ import {
createVms, createVms,
getCloudInitConfig, getCloudInitConfig,
subscribeCurrentUser, subscribeCurrentUser,
subscribeIpPools,
subscribePermissions, subscribePermissions,
subscribeResourceSets, subscribeResourceSets,
XEN_DEFAULT_CPU_CAP, XEN_DEFAULT_CPU_CAP,
@ -115,12 +116,21 @@ const Item = ({ label, children, className }) => (
</span> </span>
) )
@addSubscriptions({
// eslint-disable-next-line standard/no-callback-literal
ipPoolsConfigured: cb => subscribeIpPools(ipPools => cb(ipPools.length > 0)),
})
@injectIntl @injectIntl
class Vif extends BaseComponent { class Vif extends BaseComponent {
_getIpPoolPredicate = createSelector(
() => this.props.vif,
vif => ipPool => includes(ipPool.networks, vif.network)
)
render () { render () {
const { const {
intl: { formatMessage }, intl: { formatMessage },
ipPoolPredicate, ipPoolsConfigured,
networkPredicate, networkPredicate,
onChangeAddresses, onChangeAddresses,
onChangeMac, onChangeMac,
@ -159,26 +169,28 @@ class Vif extends BaseComponent {
)} )}
</span> </span>
</Item> </Item>
<LineItem> {ipPoolsConfigured && (
<span className={styles.inlineSelect}> <LineItem>
{pool ? ( <span className={styles.inlineSelect}>
<SelectIp {pool ? (
containerPredicate={ipPoolPredicate} <SelectIp
multi containerPredicate={this._getIpPoolPredicate()}
onChange={onChangeAddresses} multi
value={vif.addresses} onChange={onChangeAddresses}
/> value={vif.addresses}
) : ( />
<SelectResourceSetIp ) : (
containerPredicate={ipPoolPredicate} <SelectResourceSetIp
multi containerPredicate={this._getIpPoolPredicate()}
onChange={onChangeAddresses} multi
resourceSetId={resourceSet.id} onChange={onChangeAddresses}
value={vif.addresses} resourceSetId={resourceSet.id}
/> value={vif.addresses}
)} />
</span> )}
</LineItem> </span>
</LineItem>
)}
<Item> <Item>
<Button onClick={onDelete}> <Button onClick={onDelete}>
<Icon icon='new-vm-remove' /> <Icon icon='new-vm-remove' />
@ -531,25 +543,6 @@ export default class NewVm extends BaseComponent {
poolId => sr => poolId => sr =>
(poolId == null || poolId === sr.$pool) && sr.SR_type === 'iso' (poolId == null || poolId === sr.$pool) && sr.SR_type === 'iso'
) )
_getIpPoolPredicate = createSelector(
() => !!this.props.pool,
() => {
const { resourceSet } = this.props
return resourceSet && resourceSet.ipPools
},
() => this.props.vif,
(pool, ipPools, vif) => ipPool => {
if (!ipPool) {
return false
}
return (
pool ||
(ipPools &&
includes(ipPools, ipPool.id) &&
find(ipPool.networks, ipPoolNetwork => ipPoolNetwork === vif.network))
)
}
)
_getNetworkPredicate = createSelector( _getNetworkPredicate = createSelector(
this._getIsInPool, this._getIsInPool,
this._getIsInResourceSet, this._getIsInResourceSet,