fix(xo-web/VM resource set): handle unknown resource set (#4872)

In the VM's advanced tab, there was an "an error has occurred" whenever the user
couldn't access the VM's resource set.
This commit is contained in:
Pierre Donias
2020-03-24 11:29:21 +01:00
committed by GitHub
parent ae885eaddc
commit 342d02c8a8

View File

@@ -157,18 +157,63 @@ class AffinityHost extends Component {
@addSubscriptions({
resourceSets: subscribeResourceSets,
})
class ResourceSetItem extends Component {
@connectStore({
isAdmin,
})
class ResourceSet extends Component {
_getResourceSet = createSelector(
() => this.props.resourceSets,
() => this.props.id,
(resourceSets, id) =>
Object.assign(find(resourceSets, { id }), { type: 'resourceSet' })
() => this.props.vm.resourceSet,
(resourceSets, resourceSetId) => {
const resourceSet = find(resourceSets, { id: resourceSetId })
return resourceSet && Object.assign(resourceSet, { type: 'resourceSet' })
}
)
render() {
return this.props.resourceSets === undefined
? null
: renderXoItem(this._getResourceSet())
const resourceSet = this._getResourceSet()
const { vm, isAdmin } = this.props
return isAdmin ? (
<div className='input-group'>
<SelectResourceSet
onChange={resourceSet =>
editVm(vm, {
resourceSet: resourceSet != null ? resourceSet.id : resourceSet,
})
}
value={vm.resourceSet}
/>
{resourceSet !== undefined && (
<span className='input-group-btn'>
<ActionButton
btnStyle='primary'
handler={shareVmProxy}
handlerParam={vm}
icon='vm-share'
style={SHARE_BUTTON_STYLE}
tooltip={_('vmShareButton')}
/>
</span>
)}
</div>
) : vm.resourceSet === undefined ? (
_('resourceSetNone')
) : resourceSet === undefined ? (
_('errorUnknownItem', { type: 'resource set' })
) : (
<span>
{renderXoItem(resourceSet)}{' '}
<ActionButton
btnStyle='primary'
handler={shareVmProxy}
handlerParam={vm}
icon='vm-share'
size='small'
tooltip={_('vmShareButton')}
/>
</span>
)
}
}
@@ -908,47 +953,7 @@ export default class TabAdvanced extends Component {
<tr>
<th>{_('resourceSet')}</th>
<td>
{isAdmin ? (
<div className='input-group'>
<SelectResourceSet
onChange={resourceSet =>
editVm(vm, {
resourceSet:
resourceSet != null
? resourceSet.id
: resourceSet,
})
}
value={vm.resourceSet}
/>
{vm.resourceSet !== undefined && (
<span className='input-group-btn'>
<ActionButton
btnStyle='primary'
handler={shareVmProxy}
handlerParam={vm}
icon='vm-share'
style={SHARE_BUTTON_STYLE}
tooltip={_('vmShareButton')}
/>
</span>
)}
</div>
) : vm.resourceSet !== undefined ? (
<span>
<ResourceSetItem id={vm.resourceSet} />{' '}
<ActionButton
btnStyle='primary'
handler={shareVmProxy}
handlerParam={vm}
icon='vm-share'
size='small'
tooltip={_('vmShareButton')}
/>
</span>
) : (
_('resourceSetNone')
)}
<ResourceSet vm={vm} />
</td>
</tr>
{isAdmin && (