1
- import { takeEvery , put } from 'redux-saga/effects'
1
+ import { takeEvery , put , select } from 'redux-saga/effects'
2
2
3
3
import Api , { Transforms } from '_/ovirtapi'
4
4
import { callExternalAction , delay , delayInMsSteps } from '_/sagas/utils'
@@ -13,9 +13,11 @@ import {
13
13
updateVmSnapshot ,
14
14
startActionInProgress ,
15
15
stopActionInProgress ,
16
+ addUserMessage ,
16
17
} from '_/actions'
17
18
18
19
import { ADD_VM_SNAPSHOT , DELETE_VM_SNAPSHOT , RESTORE_VM_SNAPSHOT } from './constants'
20
+ import { toJS } from '_/helpers'
19
21
20
22
function * addVmSnapshot ( action ) {
21
23
const { vmId } = action . payload
@@ -68,13 +70,21 @@ function* deleteVmSnapshot (action) {
68
70
69
71
function * restoreVmSnapshot ( action ) {
70
72
const { vmId, snapshotId } = action . payload
73
+ const [ { description : snapshotName } = { } , vmName ] = yield select ( ( { vms } ) => [
74
+ toJS ( vms . getIn ( [ 'vms' , vmId , 'snapshots' ] , [ ] ) ) . find ( ( { id } ) => id === snapshotId ) ,
75
+ vms . getIn ( [ 'vms' , vmId , 'name' ] ) ,
76
+ ] )
71
77
yield put ( addSnapshotRestorePendingTask ( vmId , snapshotId ) )
72
78
yield put ( startActionInProgress ( { vmId, name : 'restoreSnapshot' } ) )
73
79
74
80
const result = yield callExternalAction ( Api . restoreSnapshot , action )
75
81
76
82
yield put ( stopActionInProgress ( { vmId, name : 'restoreSnapshot' , result } ) )
77
83
yield put ( removeSnapshotRestorePendingTask ( vmId , snapshotId ) )
84
+ if ( ! result . error ) {
85
+ // restore is synchronous operation so we can interpret completed operation as success
86
+ yield put ( addUserMessage ( { messageDescriptor : { id : 'restoredSnapshot' , params : { snapshotName, vmName } } , type : 'SUCCESS' } ) )
87
+ }
78
88
}
79
89
80
90
export default [
0 commit comments