Adding filter bar
[aai/sparky-fe.git] / src / app / contextHandler / ContextHandlerActions.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 import {
27   POST,
28   POST_HEADER
29 } from 'app/networking/NetworkConstants.js';
30 import networkCall from 'app/networking/NetworkCalls.js';
31 import {EXTERNAL_REQ_ENTITY_SEARCH_URL,
32 WRONG_EXTERNAL_REQUEST_MESSAGE,
33   WRONG_RESULT
34 } from 'app/contextHandler/ContextHandlerConstants';
35 import {
36   getSetGlobalMessageEvent,
37   getClearGlobalMessageEvent
38 } from 'app/globalInlineMessageBar/GlobalInlineMessageBarActions.js';
39
40 import {  STATUS_CODE_204_NO_CONTENT,
41   STATUS_CODE_3XX_REDIRECTION,
42   MESSAGE_LEVEL_DANGER
43 } from 'utils/GlobalConstants.js';
44
45
46 import {
47   contextHandlerActionTypes
48 } from 'app/contextHandler/ContextHandlerConstants.js';
49
50 function getExternalParamValues(urlParams) {
51   var pairs = decodeURIComponent(urlParams).replace('?','').replace(/\r\n|\n/,'').split('&');
52
53   var externalparamObject = {};
54   pairs.forEach(function(pair) {
55     pair = pair.split('=');
56     externalparamObject[pair[0]] = pair[1] || '';
57   });
58   return externalparamObject;
59
60 }
61
62 function validateExternalParams(externalURLParams) {
63   if(externalURLParams.view && externalURLParams.entityId && externalURLParams.entityType) {
64     return true;
65   }
66   return false;
67
68 }
69
70
71 function createSuggestionFoundEvent(suggestion) {
72   return {
73     type: contextHandlerActionTypes.SINGLE_SUGGESTION_FOUND,
74     data: suggestion
75   };
76 }
77
78
79 function fetchDataForExternalRequest(fetchRequestCallback) {
80   return dispatch => {
81     return fetchRequestCallback().then(
82       (response) => {
83         if (response.status === STATUS_CODE_204_NO_CONTENT || response.status >= STATUS_CODE_3XX_REDIRECTION) {
84           return Promise.reject(new Error(response.status));
85         } else {
86           // assume 200 status
87           return response.json();
88         }
89       }
90     ).then(
91       (results)=> {
92         if (results.suggestions !== undefined && results.suggestions.length === 1) {
93           dispatch(getClearGlobalMessageEvent());
94           dispatch(createSuggestionFoundEvent({suggestion: results.suggestions[0]}));
95         } else {
96           dispatch(getSetGlobalMessageEvent(WRONG_RESULT , MESSAGE_LEVEL_DANGER));
97         }
98       }
99     ).catch(
100       () => {
101         dispatch(getSetGlobalMessageEvent(WRONG_RESULT , MESSAGE_LEVEL_DANGER));
102       }
103     );
104   };
105 }
106
107 function validateAndFetchExternalParams(externalParams) {
108   if(!validateExternalParams(externalParams)) {
109     return dispatch => {
110       dispatch(
111         getSetGlobalMessageEvent(WRONG_EXTERNAL_REQUEST_MESSAGE, MESSAGE_LEVEL_DANGER));
112     };
113   } else {
114     let postBody = JSON.stringify(externalParams);
115     let externalfetchRequest =
116       () => networkCall.fetchRequestObj(EXTERNAL_REQ_ENTITY_SEARCH_URL, POST,
117         POST_HEADER, postBody);
118     return dispatch => {
119       dispatch(fetchDataForExternalRequest(externalfetchRequest));
120     };
121   }
122 }
123 export function externalUrlRequest(urlParams) {
124   let externalURLParams = getExternalParamValues(urlParams);
125   return dispatch => {
126     dispatch(
127       validateAndFetchExternalParams(externalURLParams));
128   };
129 }
130 export function externalMessageRequest(jsonParams) {
131   return dispatch => {
132     dispatch(
133       validateAndFetchExternalParams(jsonParams));
134   };
135
136 }
137