From 7d4b17380da55c4e1e8db0ee50b482ffbb6dab05 Mon Sep 17 00:00:00 2001 From: badrAZ Date: Fri, 16 Mar 2018 16:23:19 +0100 Subject: [PATCH] feat(Backups NG): fourth iteration (#2756) --- packages/xo-web/src/common/intl/messages.js | 1 + .../index.js} | 6 +- .../preview.js} | 14 +- packages/xo-web/src/xo-app/backup-ng/index.js | 2 +- .../xo-web/src/xo-app/backup-ng/new/index.js | 502 +++++++++--------- .../src/xo-app/backup-ng/new/new-schedule.js | 25 +- .../src/xo-app/backup-ng/new/schedules.js | 5 +- .../src/xo-app/backup-ng/new/smart-backup.js | 93 ++++ .../xo-web/src/xo-app/backup/new/index.js | 6 +- .../src/xo-app/backup/overview/index.js | 2 +- 10 files changed, 383 insertions(+), 273 deletions(-) rename packages/xo-web/src/common/{smart-backup-pattern.js => smart-backup/index.js} (95%) rename packages/xo-web/src/common/{smart-backup-preview.js => smart-backup/preview.js} (88%) create mode 100644 packages/xo-web/src/xo-app/backup-ng/new/smart-backup.js diff --git a/packages/xo-web/src/common/intl/messages.js b/packages/xo-web/src/common/intl/messages.js index b9716b622..51efced5b 100644 --- a/packages/xo-web/src/common/intl/messages.js +++ b/packages/xo-web/src/common/intl/messages.js @@ -280,6 +280,7 @@ const messages = { jobInterrupted: 'Interrupted', jobStarted: 'Started', saveBackupJob: 'Save', + resetBackupJob: 'Reset', createBackupJob: 'Create', deleteBackupSchedule: 'Remove backup job', deleteBackupScheduleQuestion: diff --git a/packages/xo-web/src/common/smart-backup-pattern.js b/packages/xo-web/src/common/smart-backup/index.js similarity index 95% rename from packages/xo-web/src/common/smart-backup-pattern.js rename to packages/xo-web/src/common/smart-backup/index.js index f8f0291c6..8ad11d172 100644 --- a/packages/xo-web/src/common/smart-backup-pattern.js +++ b/packages/xo-web/src/common/smart-backup/index.js @@ -1,7 +1,7 @@ import * as CM from 'complex-matcher' import { get, identity, isEmpty } from 'lodash' -import { EMPTY_OBJECT } from './utils' +import { EMPTY_OBJECT } from './../utils' export const destructPattern = (pattern, valueTransform = identity) => pattern && { @@ -106,3 +106,7 @@ export const constructQueryString = pattern => { return '' } } + +// =================================================================== + +export default from './preview' diff --git a/packages/xo-web/src/common/smart-backup-preview.js b/packages/xo-web/src/common/smart-backup/preview.js similarity index 88% rename from packages/xo-web/src/common/smart-backup-preview.js rename to packages/xo-web/src/common/smart-backup/preview.js index f06e1767c..52fa88539 100644 --- a/packages/xo-web/src/common/smart-backup-preview.js +++ b/packages/xo-web/src/common/smart-backup/preview.js @@ -5,13 +5,13 @@ import { createPredicate } from 'value-matcher' import { createSelector } from 'reselect' import { filter, map, pickBy } from 'lodash' -import Component from './base-component' -import Icon from './icon' -import Link from './link' -import renderXoItem from './render-xo-item' -import Tooltip from './tooltip' -import { Card, CardBlock, CardHeader } from './card' -import { constructQueryString } from './smart-backup-pattern' +import Component from './../base-component' +import Icon from './../icon' +import Link from './../link' +import renderXoItem from './../render-xo-item' +import Tooltip from './../tooltip' +import { Card, CardBlock, CardHeader } from './../card' +import { constructQueryString } from './index' const SAMPLE_SIZE_OF_MATCHING_VMS = 3 diff --git a/packages/xo-web/src/xo-app/backup-ng/index.js b/packages/xo-web/src/xo-app/backup-ng/index.js index 6254d1a92..476134c2b 100644 --- a/packages/xo-web/src/xo-app/backup-ng/index.js +++ b/packages/xo-web/src/xo-app/backup-ng/index.js @@ -7,7 +7,7 @@ import SortedTable from 'sorted-table' import StateButton from 'state-button' import { map, groupBy } from 'lodash' import { Card, CardHeader, CardBlock } from 'card' -import { constructQueryString } from 'smart-backup-pattern' +import { constructQueryString } from 'smart-backup' import { Container, Row, Col } from 'grid' import { NavLink, NavTabs } from 'nav' import { routes } from 'utils' diff --git a/packages/xo-web/src/xo-app/backup-ng/new/index.js b/packages/xo-web/src/xo-app/backup-ng/new/index.js index 2e60507d3..bf8b79f43 100644 --- a/packages/xo-web/src/xo-app/backup-ng/new/index.js +++ b/packages/xo-web/src/xo-app/backup-ng/new/index.js @@ -2,27 +2,16 @@ import _ from 'intl' import ActionButton from 'action-button' import React from 'react' import renderXoItem, { renderXoItemFromId } from 'render-xo-item' -import SmartBackupPreview from 'smart-backup-preview' import Tooltip from 'tooltip' import Upgrade from 'xoa-upgrade' -import { addSubscriptions, connectStore, resolveId, resolveIds } from 'utils' +import { addSubscriptions, resolveId, resolveIds } from 'utils' import { Card, CardBlock, CardHeader } from 'card' import { Container, Col, Row } from 'grid' -import { createGetObjectsOfType } from 'selectors' -import { flatten, get, keyBy, isEmpty, map, some } from 'lodash' +import { find, findKey, flatten, keyBy, isEmpty, map, some } from 'lodash' import { injectState, provideState } from '@julien-f/freactal' -import { Select, Toggle } from 'form' -import { - constructSmartPattern, - destructSmartPattern, -} from 'smart-backup-pattern' -import { - SelectPool, - SelectRemote, - SelectSr, - SelectTag, - SelectVm, -} from 'select-objects' +import { Toggle } from 'form' +import { constructSmartPattern, destructSmartPattern } from 'smart-backup' +import { SelectRemote, SelectSr, SelectVm } from 'select-objects' import { createBackupNgJob, createSchedule, @@ -33,133 +22,13 @@ import { } from 'xo' import Schedules from './schedules' +import SmartBackup from './smart-backup' import { FormGroup, getRandomId, Input, Ul, Li } from './utils' // =================================================================== -const SMART_MODE_INITIAL_STATE = { - powerState: 'All', - $pool: {}, - tags: {}, -} - -const SMART_MODE_FUNCTIONS = { - setPowerState: (_, powerState) => state => ({ - ...state, - powerState, - }), - setPoolValues: (_, values) => state => ({ - ...state, - $pool: { - ...state.$pool, - values, - }, - }), - setPoolNotValues: (_, notValues) => state => ({ - ...state, - $pool: { - ...state.$pool, - notValues, - }, - }), - setTagValues: (_, values) => state => ({ - ...state, - tags: { - ...state.tags, - values, - }, - }), - setTagNotValues: (_, notValues) => state => ({ - ...state, - tags: { - ...state.tags, - notValues, - }, - }), -} - const normaliseTagValues = values => resolveIds(values).map(value => [value]) -const SMART_MODE_COMPUTED = { - vmsSmartPattern: ({ $pool, powerState, tags }) => ({ - $pool: constructSmartPattern($pool, resolveIds), - power_state: powerState === 'All' ? undefined : powerState, - tags: constructSmartPattern(tags, normaliseTagValues), - type: 'VM', - }), - allVms: (state, { allVms }) => allVms, -} - -const VMS_STATUSES_OPTIONS = [ - { value: 'All', label: _('vmStateAll') }, - { value: 'Running', label: _('vmStateRunning') }, - { value: 'Halted', label: _('vmStateHalted') }, -] - -const SmartBackup = injectState(({ state, effects }) => ( -
- - - + +

{_('editBackupSmartPools')}

+
+ + + + + + + + +

{_('editBackupSmartTags')}

+
+ + + + + + + + + +
+ ), +].reduceRight((value, decorator) => decorator(value)) diff --git a/packages/xo-web/src/xo-app/backup/new/index.js b/packages/xo-web/src/xo-app/backup/new/index.js index 213853260..0c0fbc043 100644 --- a/packages/xo-web/src/xo-app/backup/new/index.js +++ b/packages/xo-web/src/xo-app/backup/new/index.js @@ -8,13 +8,15 @@ import Icon from 'icon' import moment from 'moment-timezone' import React from 'react' import Scheduler, { SchedulePreview } from 'scheduling' -import SmartBackupPreview from 'smart-backup-preview' +import SmartBackupPreview, { + constructPattern, + destructPattern, +} from 'smart-backup' import uncontrollableInput from 'uncontrollable-input' import Upgrade from 'xoa-upgrade' import Wizard, { Section } from 'wizard' import { confirm } from 'modal' import { connectStore, EMPTY_OBJECT } from 'utils' -import { constructPattern, destructPattern } from 'smart-backup-pattern' import { Container, Row, Col } from 'grid' import { createGetObjectsOfType, getUser } from 'selectors' import { createSelector } from 'reselect' diff --git a/packages/xo-web/src/xo-app/backup/overview/index.js b/packages/xo-web/src/xo-app/backup/overview/index.js index e7a0be2d1..5358c3b75 100644 --- a/packages/xo-web/src/xo-app/backup/overview/index.js +++ b/packages/xo-web/src/xo-app/backup/overview/index.js @@ -11,7 +11,7 @@ import SortedTable from 'sorted-table' import StateButton from 'state-button' import Tooltip from 'tooltip' import { addSubscriptions } from 'utils' -import { constructQueryString } from 'smart-backup-pattern' +import { constructQueryString } from 'smart-backup' import { createSelector } from 'selectors' import { Card, CardHeader, CardBlock } from 'card' import { filter, find, forEach, get, keyBy, map, orderBy } from 'lodash'