6de6ab099f97f9ecaeed4afc59c282a1fe80dcb6
[aai/sparky-fe.git] / src / app / tierSupport / TierSupportActions.js
1 /*
2  * ============LICENSE_START===================================================
3  * SPARKY (AAI UI service)
4  * ============================================================================
5  * Copyright © 2017 AT&T Intellectual Property.
6  * Copyright © 2017 Amdocs
7  * All rights reserved.
8  * ============================================================================
9  * Licensed under the Apache License, Version 2.0 (the "License");
10  * you may not use this file except in compliance with the License.
11  * You may obtain a copy of the License at
12  *
13  *      http://www.apache.org/licenses/LICENSE-2.0
14  *
15  * Unless required by applicable law or agreed to in writing, software
16  * distributed under the License is distributed on an "AS IS" BASIS,
17  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18  * See the License for the specific language governing permissions and
19  * limitations under the License.
20  * ============LICENSE_END=====================================================
21  *
22  * ECOMP and OpenECOMP are trademarks
23  * and service marks of AT&T Intellectual Property.
24  */
25
26
27 import {tierSupportActionTypes,
28   TS_BACKEND_SEARCH_SELECTED_NODE_URL} from 'app/tierSupport/TierSupportConstants.js';
29 import {
30   POST,
31   POST_HEADER,
32   ERROR_RETRIEVING_DATA,
33   NO_RESULTS_FOUND
34 } from 'app/networking/NetworkConstants.js';
35 import networkCall from 'app/networking/NetworkCalls.js';
36 import {
37   getSetGlobalMessageEvent,
38   getClearGlobalMessageEvent
39 } from 'app/globalInlineMessageBar/GlobalInlineMessageBarActions.js';
40 import {
41   STATUS_CODE_204_NO_CONTENT,
42   STATUS_CODE_3XX_REDIRECTION,
43   STATUS_CODE_5XX_SERVER_ERROR
44 } from 'utils/GlobalConstants.js';
45
46 function createOnNodeDetailsChangeEvent(newDetails) {
47   return {
48     type: tierSupportActionTypes.TS_GRAPH_NODE_SELECTED,
49     data: newDetails
50   };
51 }
52
53 function createSplitPaneResizeEvent(initialLoad) {
54   return {
55     type: tierSupportActionTypes.SPLIT_PANE_RESIZE,
56     data: initialLoad
57   };
58 }
59
60 function createOnNodeMenuSelectEvent(selectedMenu) {
61   return {
62     type: tierSupportActionTypes.TS_GRAPH_NODE_MENU_SELECTED,
63     data: selectedMenu
64   };
65 }
66
67 export function onNodeDetailsChange(newDetails) {
68   return dispatch => {
69     dispatch(createOnNodeDetailsChangeEvent(newDetails));
70   };
71 }
72
73 export function splitPaneResize(initialLoad) {
74   return dispatch => {
75     dispatch(createSplitPaneResizeEvent(initialLoad));
76   };
77 }
78
79 export function onNodeMenuChange(selectedMenu) {
80   return dispatch => {
81     dispatch(createOnNodeMenuSelectEvent(selectedMenu));
82   };
83 }
84
85 function createNodeDetailsFoundEvent(nodeDetails) {
86   return {
87     type: tierSupportActionTypes.TS_NODE_SEARCH_RESULTS,
88     data: nodeDetails
89   };
90 }
91
92 function createSelectedNodeDetails(nodeDetails) {
93   var selectedNodeDetail;
94   for(let i = 0; i < nodeDetails.nodes.length; i++) {
95     if(nodeDetails.nodes[i].nodeMeta.className === 'selectedSearchedNodeClass') {
96       selectedNodeDetail = nodeDetails.nodes[i];
97       break;
98     }
99   }
100   return {
101     type: tierSupportActionTypes.TS_GRAPH_NODE_SELECTED,
102     data: selectedNodeDetail
103   };
104 }
105
106 function noNodeDetailsFoundEvent(errorText) {
107   return {
108     type: tierSupportActionTypes.TS_NODE_SEARCH_NO_RESULTS,
109     data: {errorMsg: errorText}
110   };
111 }
112
113 function getInvalidSelectedNodeSearchEvent(errorText) {
114   return {
115     type: tierSupportActionTypes.TIER_SUPPORT_NETWORK_ERROR,
116     data: {value: errorText, errorMsg: ERROR_RETRIEVING_DATA}
117   };
118 }
119
120 export function clearVIData() {
121   return {
122     type: tierSupportActionTypes.TIER_SUPPORT_CLEAR_DATA
123   };
124 }
125
126 export function fetchSelectedNodeElement(fetchRequestCallback) {
127   return dispatch => {
128     return fetchRequestCallback().then(
129       (response) => {
130         if (response.status === STATUS_CODE_204_NO_CONTENT || response.status >= STATUS_CODE_3XX_REDIRECTION) {
131           return Promise.reject(new Error(response.status));
132         } else {
133           // assume 200 status
134           return response.json();
135         }
136       }
137     ).then(
138       (responseJson) => {
139         if (responseJson.nodes.length > 0) {
140           dispatch(createNodeDetailsFoundEvent(responseJson));
141           dispatch(createSelectedNodeDetails(responseJson));
142         } else {
143           dispatch(noNodeDetailsFoundEvent(NO_RESULTS_FOUND));
144         }
145       }
146     ).catch(
147       (errorCode) => {
148         if (errorCode.message >= STATUS_CODE_5XX_SERVER_ERROR) {
149           dispatch(getInvalidSelectedNodeSearchEvent(ERROR_RETRIEVING_DATA));
150         } else {
151           // TODO - assuming 204 status, but should include additional
152           // statuses in the future with proper messaging in order to return
153           // better messaging
154           dispatch(noNodeDetailsFoundEvent(NO_RESULTS_FOUND));
155         }
156       }
157     );
158   };
159 }
160
161 export function querySelectedNodeElement(
162   searchHashId, selectedNodeFetchRequest) {
163   let payload = {
164     hashId: searchHashId
165   };
166
167   if (selectedNodeFetchRequest === undefined) {
168     let postBody = JSON.stringify(payload);
169     selectedNodeFetchRequest =
170       () => networkCall.fetchRequestObj(TS_BACKEND_SEARCH_SELECTED_NODE_URL, POST,
171         POST_HEADER, postBody);
172   }
173
174   return dispatch => {
175     dispatch(fetchSelectedNodeElement(selectedNodeFetchRequest));
176   };
177 }
178
179 export function setNotificationText(msgText, msgSeverity) {
180   if (msgText.length > 0) {
181     return dispatch => {
182       dispatch(
183         getSetGlobalMessageEvent(msgText, msgSeverity));
184     };
185   } else {
186     return dispatch => {
187       dispatch(getClearGlobalMessageEvent());
188     };
189   }
190 }