add framework for blocking user interaction
[clamp.git] / ui-react / src / components / dialogs / PerformActions.js
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP CLAMP
4  * ================================================================================
5  * Copyright (C) 2019 AT&T Intellectual Property. All rights
6  *                             reserved.
7  * ================================================================================
8  * Licensed under the Apache License, Version 2.0 (the "License");
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  *
12  * http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  * ============LICENSE_END============================================
20  * ===================================================================
21  *
22  */
23 import React from 'react';
24 import LoopActionService from '../../api/LoopActionService';
25
26
27 export default class PerformActions extends React.Component {
28         state = {
29                 loopName: this.props.loopCache.getLoopName(),
30                 loopAction: this.props.loopAction
31         };
32
33         constructor(props, context) {
34                 super(props, context);
35                 this.refreshStatus = this.refreshStatus.bind(this);
36         }
37
38         componentWillReceiveProps(newProps) {
39                 this.setState({
40                         loopName: newProps.loopCache.getLoopName(),
41                         loopAction: newProps.loopAction
42                 });
43         }
44
45         componentDidMount() {
46                 const action = this.state.loopAction;
47                 const loopName = this.state.loopName;
48
49                 if (action === 'delete') {
50                         if (window.confirm('You are about to remove Control Loop Model "' + loopName +
51                                         '". Select OK to continue with deletion or Cancel to keep the model.') === false) {
52                                 return;
53                         }
54                 }
55
56                 this.props.setBusyLoading(); // Alert top level to start block user clicks
57
58                 LoopActionService.performAction(loopName, action)
59                 .then(pars => {
60                         this.props.showSucAlert("Action " + action + " successfully performed");
61                         if (action === 'delete') {
62                                 this.props.updateLoopFunction(null);
63                                 this.props.history.push('/');
64                         } else {
65                                 // refresh status and update loop logs
66                                 this.refreshStatus(loopName);
67                         }
68                 })
69                 .catch(error => {
70                         this.props.showFailAlert("Action " + action + " failed");
71                         // refresh status and update loop logs
72                         this.refreshStatus(loopName);
73                 })
74                 .finally(() => this.props.clearBusyLoading());
75         }
76
77         refreshStatus(loopName) {
78
79                 this.props.setBusyLoading();
80
81                 LoopActionService.refreshStatus(loopName)
82                 .then(data => {
83                         this.props.updateLoopFunction(data);
84                         this.props.history.push('/');
85                 })
86                 .catch(error => {
87                         this.props.history.push('/');
88                 })
89                 .finally(() => this.props.clearBusyLoading());
90         }
91
92         render() {
93                 return null;
94         }
95 }