2 * Copyright © 2018 European Support Limited
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
16 import { all, call, put, takeEvery, takeLatest } from 'redux-saga/effects';
18 import { genericNetworkErrorAction } from 'src/appConstants';
20 setWorkflowVersionAction,
21 versionStateChangedAction,
23 } from 'features/version/versionConstants';
24 import { setInputsOutputs } from 'features/version/inputOutput/inputOutputActions';
25 import { SUBMIT_VERSION } from 'features/version/create/createVersionConstants';
29 } from 'features/version/versionController/versionControllerConstants';
30 import versionApi from 'features/version/versionApi';
31 import { notificationActions } from 'shared/notifications/notificationsActions';
32 import { versionState } from 'features/version/versionConstants';
33 import overviewApi from '../workflow/overview/overviewApi';
34 import { versionListFetchAction } from '../workflow/overview/overviewConstansts';
35 import { updateComposition } from 'features/version/composition/compositionActions';
36 import activitiesApi from 'features/activities/activitiesApi';
37 import { setActivitiesList } from 'features/activities/activitiesActions';
39 function* fetchVersion(action) {
41 const data = yield call(versionApi.fetchVersion, action.payload);
42 const { inputs, outputs, ...rest } = data;
43 let composition = false;
45 if (rest.hasArtifact) {
46 composition = yield call(
47 versionApi.fetchVersionArtifact,
51 const activitiesList = yield call(activitiesApi.fetchActivities);
53 put(setWorkflowVersionAction(rest)),
54 put(setInputsOutputs({ inputs, outputs })),
55 put(updateComposition(composition)),
56 put(setActivitiesList(activitiesList.results))
59 yield put(genericNetworkErrorAction(error));
63 function* watchSubmitVersion(action) {
65 const { workflowId, history } = action.payload;
66 const data = yield call(versionApi.createNewVersion, action.payload);
67 const versions = yield call(overviewApi.getVersions, workflowId);
68 yield put(versionListFetchAction(versions));
70 history.push('/workflow/' + workflowId + '/version/' + data.id)
73 yield put(genericNetworkErrorAction(error));
77 function* watchUpdateVersion(action) {
81 params: { composition, ...versionData }
83 yield call(versionApi.updateVersion, {
88 yield call(versionApi.updateVersionArtifact, {
90 versionId: versionData.id,
95 notificationActions.showSuccess({
96 title: 'Update Workflow Version',
97 message: 'Successfully updated'
101 yield put(genericNetworkErrorAction(error));
105 function* watchCertifyVersion(action) {
107 const { workflowId, params } = action.payload;
108 yield call(versionApi.updateVersion, {
112 yield call(versionApi.certifyVersion, {
116 notificationActions.showSuccess({
117 title: 'Certify Version',
118 message: 'Successfully updated'
121 yield put(versionStateChangedAction({ state: versionState.CERTIFIED }));
123 yield put(genericNetworkErrorAction(error));
127 function* versionSaga() {
128 yield takeLatest(FETCH_REQUESTED, fetchVersion);
129 yield takeEvery(SUBMIT_VERSION, watchSubmitVersion);
130 yield takeEvery(SAVE_ACTION, watchUpdateVersion);
131 yield takeEvery(CERTIFY_ACTION, watchCertifyVersion);
134 export default versionSaga;