summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/app/tierSupport/TierSupportActions.js121
1 files changed, 119 insertions, 2 deletions
diff --git a/src/app/tierSupport/TierSupportActions.js b/src/app/tierSupport/TierSupportActions.js
index afb37be..08e4e30 100644
--- a/src/app/tierSupport/TierSupportActions.js
+++ b/src/app/tierSupport/TierSupportActions.js
@@ -18,13 +18,24 @@
* limitations under the License.
* ============LICENSE_END=========================================================
*/
+import {tierSupportActionTypes,
+ TS_BACKEND_SEARCH_SELECTED_NODE_URL} from 'app/tierSupport/TierSupportConstants.js';
import {
- tierSupportActionTypes
-} from 'app/tierSupport/TierSupportConstants.js';
+ POST,
+ POST_HEADER,
+ ERROR_RETRIEVING_DATA,
+ NO_RESULTS_FOUND
+} from 'app/networking/NetworkConstants.js';
+import networkCall from 'app/networking/NetworkCalls.js';
import {
getSetGlobalMessageEvent,
getClearGlobalMessageEvent
} from 'app/globalInlineMessageBar/GlobalInlineMessageBarActions.js';
+import {
+ STATUS_CODE_204_NO_CONTENT,
+ STATUS_CODE_3XX_REDIRECTION,
+ STATUS_CODE_5XX_SERVER_ERROR
+} from 'utils/GlobalConstants.js';
function createOnNodeDetailsChangeEvent(newDetails) {
return {
@@ -65,12 +76,118 @@ export function onNodeMenuChange(selectedMenu) {
};
}
+function createNodeDetailsFoundEvent(nodeDetails) {
+ return {
+ type: tierSupportActionTypes.TS_NODE_SEARCH_RESULTS,
+ data: nodeDetails
+ };
+}
+
+function createSelectedNodeDetails(nodeDetails) {
+ var selectedNodeDetail;
+ for(let i = 0; i < nodeDetails.nodes.length; i++) {
+ if(nodeDetails.nodes[i].nodeMeta.className === 'selectedSearchedNodeClass') {
+ selectedNodeDetail = nodeDetails.nodes[i];
+ break;
+ }
+ }
+ return {
+ type: tierSupportActionTypes.TS_GRAPH_NODE_SELECTED,
+ data: selectedNodeDetail
+ };
+}
+
+function noNodeDetailsFoundEvent(errorText) {
+ return {
+ type: tierSupportActionTypes.TS_NODE_SEARCH_NO_RESULTS,
+ data: {errorMsg: errorText}
+ };
+}
+
+function getInvalidSelectedNodeSearchEvent(errorText) {
+ return {
+ type: tierSupportActionTypes.TIER_SUPPORT_NETWORK_ERROR,
+ data: {value: errorText, errorMsg: ERROR_RETRIEVING_DATA}
+ };
+}
+
export function clearVIData() {
return {
type: tierSupportActionTypes.TIER_SUPPORT_CLEAR_DATA
};
}
+function setBusyFeedback(){
+ return {
+ type: tierSupportActionTypes.TIER_SUPPORT_ACTIVATE_BUSY_FEEDBACK
+ };
+}
+
+function disableBusyFeedback(){
+ return {
+ type: tierSupportActionTypes.TIER_SUPPORT_DISABLE_BUSY_FEEDBACK
+ };
+}
+
+export function fetchSelectedNodeElement(fetchRequestCallback) {
+ return dispatch => {
+ return fetchRequestCallback().then(
+ (response) => {
+ if (response.status === STATUS_CODE_204_NO_CONTENT || response.status >= STATUS_CODE_3XX_REDIRECTION) {
+ return Promise.reject(new Error(response.status));
+ } else {
+ // assume 200 status
+ return response.json();
+ }
+ }
+ ).then(
+ (responseJson) => {
+ if (responseJson.nodes.length > 0) {
+ dispatch(createNodeDetailsFoundEvent(responseJson));
+ dispatch(createSelectedNodeDetails(responseJson));
+ } else {
+ dispatch(noNodeDetailsFoundEvent(NO_RESULTS_FOUND));
+ }
+ }
+ ).then(
+ () => {
+ dispatch(disableBusyFeedback());
+ }
+ ).catch(
+ (errorCode) => {
+ dispatch(disableBusyFeedback());
+ if (errorCode.message >= STATUS_CODE_5XX_SERVER_ERROR) {
+ dispatch(getInvalidSelectedNodeSearchEvent(ERROR_RETRIEVING_DATA));
+ } else {
+ // TODO - assuming 204 status, but should include additional
+ // statuses in the future with proper messaging in order to return
+ // better messaging
+ dispatch(noNodeDetailsFoundEvent(NO_RESULTS_FOUND));
+ }
+ }
+ );
+ };
+}
+
+export function querySelectedNodeElement(
+ searchHashId, selectedNodeFetchRequest) {
+ let payload = {
+ hashId: searchHashId
+ };
+
+ if (selectedNodeFetchRequest === undefined) {
+ let postBody = JSON.stringify(payload);
+ selectedNodeFetchRequest =
+ () => networkCall.fetchRequestObj(TS_BACKEND_SEARCH_SELECTED_NODE_URL, POST,
+ POST_HEADER, postBody);
+ }
+
+ return dispatch => {
+ dispatch(setBusyFeedback());
+ dispatch(fetchSelectedNodeElement(selectedNodeFetchRequest));
+ };
+}
+
export function setNotificationText(msgText, msgSeverity) {
if (msgText.length > 0) {
return dispatch => {