cdaf9aeb446b58231a60a2e278e63fbfed5cce1d
[sdc/sdc-workflow-designer.git] /
1 /*
2 * Copyright © 2018 European Support Limited
3 *
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
7 *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9 *
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.
15 */
16 import React, { Component } from 'react';
17 import PropTypes from 'prop-types';
18
19 import ActionButtons from 'features/version/versionController/views/ActionButtons';
20 import VersionContainer from 'features/version/versionController/views/VersionsContainer';
21 import WorkflowTitle from 'features/version/versionController/views/WorkflowTitle';
22
23 export default class VersionControllerView extends Component {
24     static propTypes = {
25         location: PropTypes.object,
26         workflowName: PropTypes.string,
27         currentWorkflowVersion: PropTypes.object,
28         viewableVersions: PropTypes.arrayOf(Object),
29         getVersions: PropTypes.func,
30         versionsList: PropTypes.array,
31         history: PropTypes.object,
32         getOverview: PropTypes.func,
33         match: PropTypes.object,
34         savedParams: PropTypes.object,
35         saveParamsToServer: PropTypes.func,
36         workflowId: PropTypes.string,
37         certifyVersion: PropTypes.func,
38         changeVersion: PropTypes.func,
39         isCertifyDisable: PropTypes.bool,
40         hasErrors: PropTypes.bool,
41         isArchive: PropTypes.bool
42     };
43
44     constructor(props) {
45         super(props);
46     }
47
48     routeToOverview = () => {
49         const { history, match } = this.props;
50         const workflowId = match.params.workflowId;
51         history.push('/workflow/' + workflowId + '/overview');
52     };
53
54     sendSaveParamsToServer = () => {
55         const {
56             savedParams,
57             saveParamsToServer,
58             workflowId,
59             workflowName
60         } = this.props;
61         saveParamsToServer({ params: savedParams, workflowId, workflowName });
62     };
63
64     certifyVersion = () => {
65         const {
66             certifyVersion,
67             workflowId,
68             currentWorkflowVersion,
69             savedParams,
70             workflowName
71         } = this.props;
72         certifyVersion({
73             workflowId,
74             workflowName,
75             versionId: currentWorkflowVersion.id,
76             params: savedParams
77         });
78     };
79
80     versionChangeCallback = versionId => {
81         const { changeVersion, workflowId } = this.props;
82         changeVersion({ versionId, workflowId });
83     };
84
85     undoClickCallback = () => {
86         const {
87             currentWorkflowVersion,
88             changeVersion,
89             workflowId
90         } = this.props;
91         changeVersion({ versionId: currentWorkflowVersion.id, workflowId });
92     };
93
94     render() {
95         const {
96             currentWorkflowVersion,
97             workflowName,
98             versionsList,
99             hasErrors,
100             isCertifyDisable,
101             isArchive
102         } = this.props;
103         const isReadonly = isCertifyDisable || hasErrors || isArchive;
104         return (
105             <div className="version-controller-bar">
106                 <WorkflowTitle workflowName={workflowName} />
107                 <div className="vc-container">
108                     <VersionContainer
109                         currentWorkflowVersion={currentWorkflowVersion}
110                         viewableVersions={versionsList}
111                         onOverviewClick={this.routeToOverview}
112                         onVersionSelectChange={this.versionChangeCallback}
113                         isArchive={isArchive}
114                     />
115                     <ActionButtons
116                         saveDisabled={isReadonly}
117                         onSaveClick={this.sendSaveParamsToServer}
118                         certifyDisabled={isReadonly}
119                         onCertifyClick={this.certifyVersion}
120                         onUndoClick={this.undoClickCallback}
121                     />
122                 </div>
123             </div>
124         );
125     }
126 }
127
128 VersionControllerView.defaultProps = {
129     getVersions: () => {}
130 };