From ed5e0c350909199304f2f1b737a2bcaee5242ca5 Mon Sep 17 00:00:00 2001 From: badrAZ Date: Mon, 26 Mar 2018 18:01:29 +0200 Subject: [PATCH] feat(xo-web/xoa/update): warn before upgrade if jobs running (#2795) Fixes #2250 --- packages/xo-web/src/common/intl/messages.js | 3 ++ .../xo-web/src/xo-app/xoa/update/index.js | 31 ++++++++++++++++--- 2 files changed, 29 insertions(+), 5 deletions(-) diff --git a/packages/xo-web/src/common/intl/messages.js b/packages/xo-web/src/common/intl/messages.js index 51efced5b..7a7683013 100644 --- a/packages/xo-web/src/common/intl/messages.js +++ b/packages/xo-web/src/common/intl/messages.js @@ -1524,6 +1524,9 @@ const messages = { promptUpgradeReloadTitle: 'Upgrade successful', promptUpgradeReloadMessage: 'Your XOA has successfully upgraded, and your browser must reload the application. Do you want to reload now ?', + upgradeWarningTitle: 'Upgrade warning', + upgradeWarningMessage: + 'You have some backup jobs in progress. If you upgrade now, these jobs will be interrupted! Are you sure you want to continue?', // ----- OS Disclaimer ----- disclaimerTitle: 'Xen Orchestra from the sources', diff --git a/packages/xo-web/src/xo-app/xoa/update/index.js b/packages/xo-web/src/xo-app/xoa/update/index.js index e14772464..ad96fbab8 100644 --- a/packages/xo-web/src/xo-app/xoa/update/index.js +++ b/packages/xo-web/src/xo-app/xoa/update/index.js @@ -7,15 +7,16 @@ import Icon from 'icon' import React from 'react' import Tooltip from 'tooltip' import xoaUpdater, { exposeTrial, isTrialRunning } from 'xoa-updater' -import { confirm } from 'modal' -import { connectStore } from 'utils' +import { addSubscriptions, connectStore } from 'utils' +import { assign, includes, isEmpty, map, some } from 'lodash' import { Card, CardBlock, CardHeader } from 'card' +import { confirm } from 'modal' import { Container, Row, Col } from 'grid' +import { createSelector } from 'selectors' import { error } from 'notification' import { injectIntl } from 'react-intl' import { Password } from 'form' -import { serverVersion } from 'xo' -import { assign, includes, isEmpty, map } from 'lodash' +import { serverVersion, subscribeBackupNgJobs, subscribeJobs } from 'xo' import pkg from '../../../../package' @@ -50,8 +51,18 @@ const states = { } const update = () => xoaUpdater.update() -const upgrade = () => xoaUpdater.upgrade() +const upgrade = ({ runningJobsExist }) => + runningJobsExist + ? confirm({ + title: _('upgradeWarningTitle'), + body: _('upgradeWarningMessage'), + }).then(() => xoaUpdater.upgrade()) + : xoaUpdater.upgrade() +@addSubscriptions({ + backupNgJobs: subscribeBackupNgJobs, + jobs: subscribeJobs, +}) @connectStore(state => { return { configuration: state.xoaConfiguration, @@ -156,6 +167,15 @@ export default class XoaUpdates extends Component { update() } + _getRunningJobsExist = createSelector( + () => this.props.jobs, + () => this.props.backupNgJobs, + (jobs, backupNgJobs) => + jobs !== undefined && + backupNgJobs !== undefined && + some(jobs.concat(backupNgJobs), job => job.runId !== undefined) + ) + render () { const textClasses = { info: 'text-info', @@ -209,6 +229,7 @@ export default class XoaUpdates extends Component { {' '}