chore(xo-web/backup-ng): improve setting power state implementation (#3684)

This commit is contained in:
badrAZ
2018-11-16 14:05:58 +01:00
committed by Pierre Donias
parent 2934b23d2f
commit 2353581da8
2 changed files with 41 additions and 13 deletions

View File

@@ -112,7 +112,6 @@ const constructPattern = values =>
const destructVmsPattern = pattern =>
pattern.id === undefined
? {
powerState: pattern.power_state || 'All',
$pool: destructSmartPattern(pattern.$pool),
tags: destructSmartPattern(pattern.tags, flatten),
}
@@ -143,6 +142,7 @@ const createDoesRetentionExist = name => {
}
const getInitialState = () => ({
_vmsPattern: undefined,
$pool: {},
backupMode: false,
compression: undefined,
@@ -152,7 +152,6 @@ const getInitialState = () => ({
drMode: false,
name: '',
paramsUpdated: false,
powerState: 'All',
remotes: [],
schedules: {},
settings: undefined,
@@ -484,9 +483,8 @@ export default decorate([
snapshotRetention,
}),
}),
setPowerState: (_, powerState) => state => ({
...state,
powerState,
onVmsPatternChange: (_, _vmsPattern) => ({
_vmsPattern,
}),
setPoolValues: (_, values) => state => ({
...state,
@@ -566,6 +564,10 @@ export default decorate([
inputReportWhenId: generateId,
inputTimeoutId: generateId,
vmsPattern: ({ _vmsPattern }, { job }) =>
defined(_vmsPattern, () => job.vms, {
type: 'VM',
}),
needUpdateParams: (state, { job, schedules }) =>
job !== undefined && schedules !== undefined && !state.paramsUpdated,
isJobInvalid: state =>
@@ -599,11 +601,10 @@ export default decorate([
snapshotRetentionExists: createDoesRetentionExist('snapshotRetention'),
isDelta: state => state.deltaMode || state.crMode,
isFull: state => state.backupMode || state.drMode,
vmsSmartPattern: ({ $pool, powerState, tags }) => ({
vmsSmartPattern: ({ $pool, tags, vmsPattern }) => ({
...vmsPattern,
$pool: constructSmartPattern($pool, resolveIds),
power_state: powerState === 'All' ? undefined : powerState,
tags: constructSmartPattern(tags, normalizeTagValues),
type: 'VM',
}),
vmPredicate: ({ isDelta }, { hostsById, poolsById }) => ({
$container,
@@ -986,7 +987,10 @@ export default decorate([
{state.smartMode ? (
<Upgrade place='newBackup' required={3}>
<SmartBackup />
<SmartBackup
onChange={effects.onVmsPatternChange}
pattern={state.vmsPattern}
/>
</Upgrade>
) : (
<FormFeedback

View File

@@ -1,13 +1,15 @@
import _ from 'intl'
import decorate from 'apply-decorators'
import defined from '@xen-orchestra/defined'
import Icon from 'icon'
import PropTypes from 'prop-types'
import React from 'react'
import SmartBackupPreview from 'smart-backup'
import Tooltip from 'tooltip'
import { connectStore } from 'utils'
import { createGetObjectsOfType } from 'selectors'
import { get } from 'lodash'
import { injectState } from 'reaclette'
import { injectState, provideState } from 'reaclette'
import { Select } from 'form'
import { SelectPool, SelectTag } from 'select-objects'
@@ -19,12 +21,27 @@ const VMS_STATUSES_OPTIONS = [
{ value: 'Halted', label: _('vmStateHalted') },
]
export default decorate([
const SmartBackup = decorate([
connectStore({
vms: createGetObjectsOfType('VM'),
}),
provideState({
effects: {
setPattern: (_, value) => (_, { pattern, onChange }) => {
onChange({
...pattern,
...value,
})
},
setPowerState ({ setPattern }, powerState) {
setPattern({
power_state: powerState === 'All' ? undefined : powerState,
})
},
},
}),
injectState,
({ state, effects, vms }) => (
({ state, effects, vms, pattern }) => (
<div>
<FormGroup>
<label>
@@ -33,7 +50,7 @@ export default decorate([
<Select
options={VMS_STATUSES_OPTIONS}
onChange={effects.setPowerState}
value={state.powerState}
value={defined(pattern.power_state, 'All')}
simpleValue
required
/>
@@ -90,3 +107,10 @@ export default decorate([
</div>
),
])
SmartBackup.propTypes = {
onChange: PropTypes.func.isRequired,
pattern: PropTypes.object.isRequired,
}
export default SmartBackup