Adding filter bar
[aai/sparky-fe.git] / src / app / tierSupport / TierSupportActions.js
1 /*
2  * ============LICENSE_START=======================================================
3  * org.onap.aai
4  * ================================================================================
5  * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
6  * Copyright © 2017 Amdocs
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  * ECOMP is a trademark and service mark of AT&T Intellectual Property.
22  */
23
24 import {tierSupportActionTypes,
25   TS_BACKEND_SEARCH_SELECTED_NODE_URL} from 'app/tierSupport/TierSupportConstants.js';
26 import {
27   POST,
28   POST_HEADER,
29   ERROR_RETRIEVING_DATA,
30   NO_RESULTS_FOUND
31 } from 'app/networking/NetworkConstants.js';
32 import networkCall from 'app/networking/NetworkCalls.js';
33 import {
34   getSetGlobalMessageEvent,
35   getClearGlobalMessageEvent
36 } from 'app/globalInlineMessageBar/GlobalInlineMessageBarActions.js';
37 import {
38   STATUS_CODE_204_NO_CONTENT,
39   STATUS_CODE_3XX_REDIRECTION,
40   STATUS_CODE_5XX_SERVER_ERROR
41 } from 'utils/GlobalConstants.js';
42
43 function createOnNodeDetailsChangeEvent(newDetails) {
44   return {
45     type: tierSupportActionTypes.TS_GRAPH_NODE_SELECTED,
46     data: newDetails
47   };
48 }
49
50 function createSplitPaneResizeEvent(initialLoad) {
51   return {
52     type: tierSupportActionTypes.SPLIT_PANE_RESIZE,
53     data: initialLoad
54   };
55 }
56
57 function createOnNodeMenuSelectEvent(selectedMenu) {
58   return {
59     type: tierSupportActionTypes.TS_GRAPH_NODE_MENU_SELECTED,
60     data: selectedMenu
61   };
62 }
63
64 export function onNodeDetailsChange(newDetails) {
65   return dispatch => {
66     dispatch(createOnNodeDetailsChangeEvent(newDetails));
67   };
68 }
69
70 export function splitPaneResize(initialLoad) {
71   return dispatch => {
72     dispatch(createSplitPaneResizeEvent(initialLoad));
73   };
74 }
75
76 export function onNodeMenuChange(selectedMenu) {
77   return dispatch => {
78     dispatch(createOnNodeMenuSelectEvent(selectedMenu));
79   };
80 }
81
82 function createNodeDetailsFoundEvent(nodeDetails) {
83   return {
84     type: tierSupportActionTypes.TS_NODE_SEARCH_RESULTS,
85     data: nodeDetails
86   };
87 }
88
89 function createSelectedNodeDetails(nodeDetails) {
90   var selectedNodeDetail;
91   for(let i = 0; i < nodeDetails.nodes.length; i++) {
92     if(nodeDetails.nodes[i].nodeMeta.className === 'selectedSearchedNodeClass') {
93       selectedNodeDetail = nodeDetails.nodes[i];
94       break;
95     }
96   }
97   return {
98     type: tierSupportActionTypes.TS_GRAPH_NODE_SELECTED,
99     data: selectedNodeDetail
100   };
101 }
102
103 function noNodeDetailsFoundEvent(errorText) {
104   return {
105     type: tierSupportActionTypes.TS_NODE_SEARCH_NO_RESULTS,
106     data: {errorMsg: errorText}
107   };
108 }
109
110 function getInvalidSelectedNodeSearchEvent(errorText) {
111   return {
112     type: tierSupportActionTypes.TIER_SUPPORT_NETWORK_ERROR,
113     data: {value: errorText, errorMsg: ERROR_RETRIEVING_DATA}
114   };
115 }
116
117 export function clearVIData() {
118   return {
119     type: tierSupportActionTypes.TIER_SUPPORT_CLEAR_DATA
120   };
121 }
122
123 export function fetchSelectedNodeElement(fetchRequestCallback) {
124   return dispatch => {
125     return fetchRequestCallback().then(
126       (response) => {
127         if (response.status === STATUS_CODE_204_NO_CONTENT || response.status >= STATUS_CODE_3XX_REDIRECTION) {
128           return Promise.reject(new Error(response.status));
129         } else {
130           // assume 200 status
131           return response.json();
132         }
133       }
134     ).then(
135       (responseJson) => {
136         if (responseJson.nodes.length > 0) {
137           dispatch(createNodeDetailsFoundEvent(responseJson));
138           dispatch(createSelectedNodeDetails(responseJson));
139         } else {
140           dispatch(noNodeDetailsFoundEvent(NO_RESULTS_FOUND));
141         }
142       }
143     ).catch(
144       (errorCode) => {
145         if (errorCode.message >= STATUS_CODE_5XX_SERVER_ERROR) {
146           dispatch(getInvalidSelectedNodeSearchEvent(ERROR_RETRIEVING_DATA));
147         } else {
148           // TODO - assuming 204 status, but should include additional
149           // statuses in the future with proper messaging in order to return
150           // better messaging
151           dispatch(noNodeDetailsFoundEvent(NO_RESULTS_FOUND));
152         }
153       }
154     );
155   };
156 }
157
158 export function querySelectedNodeElement(
159   searchHashId, selectedNodeFetchRequest) {
160   let payload = {
161     hashId: searchHashId
162   };
163
164   if (selectedNodeFetchRequest === undefined) {
165     let postBody = JSON.stringify(payload);
166     selectedNodeFetchRequest =
167       () => networkCall.fetchRequestObj(TS_BACKEND_SEARCH_SELECTED_NODE_URL, POST,
168         POST_HEADER, postBody);
169   }
170
171   return dispatch => {
172     dispatch(fetchSelectedNodeElement(selectedNodeFetchRequest));
173   };
174 }
175
176 export function setNotificationText(msgText, msgSeverity) {
177   if (msgText.length > 0) {
178     return dispatch => {
179       dispatch(
180         getSetGlobalMessageEvent(msgText, msgSeverity));
181     };
182   } else {
183     return dispatch => {
184       dispatch(getClearGlobalMessageEvent());
185     };
186   }
187 }