Add network call as promise for ext views 13/64513/3
authorArul.Nambi <arul.nambi@amdocs.com>
Tue, 4 Sep 2018 20:18:34 +0000 (16:18 -0400)
committerArul.Nambi <arul.nambi@amdocs.com>
Wed, 5 Sep 2018 12:55:56 +0000 (08:55 -0400)
Adding support for network calls that can be used in the extended views
without relying on the reducers of main app. Also adding functinality to
remove the view from the hanburger menu which will be useful for apps
that want to have a route but not an entry in main menu.

Issue-ID: AAI-1564
Change-Id: Ie4776d030d8458d3ce8d77782d5dfda11e01b878
Signed-off-by: Arul.Nambi <arul.nambi@amdocs.com>
resources/views/extensibleViews.json
src/app/MainScreenHeader.jsx
src/app/MainScreenWrapper.jsx
src/app/extensibility/index.js
src/app/networking/NetworkCalls.js

index ec1efda..a3225e7 100644 (file)
@@ -29,7 +29,6 @@ import {postAnalyticsData} from 'app/analytics/AnalyticsActions.js';
 import GlobalInlineMessageBar from 'app/globalInlineMessageBar/GlobalInlineMessageBar.jsx';
 import {getClearGlobalMessageEvent} from 'app/globalInlineMessageBar/GlobalInlineMessageBarActions.js';
 import {externalUrlRequest, externalMessageRequest, getSubscriptionPayload} from 'app/contextHandler/ContextHandlerActions.js';
-
 import {
   filterBarActionTypes
 } from 'utils/GlobalConstants.js';
@@ -265,11 +264,19 @@ class MainScreenHeader extends Component {
 
     // add all custom view menu options
     for (let view in extensibleViews) {
-      menuOptions.push(
-        <MenuItem key={extensibleViews[view]['viewName'] + 'Menu'} to={'/' + extensibleViews[view]['viewName']}
-                  label={extensibleViews[view]['displayName']}
-                  iconClass={'button-icon ' + extensibleViews[view]['iconClass']}/>
-      );
+      let shouldDisplayIcon = false;
+      if(extensibleViews[view]['onlyRoute'] === undefined){
+        shouldDisplayIcon = true;
+      } else if(extensibleViews[view]['onlyRoute'] === false){
+        shouldDisplayIcon = true;
+      }
+      if(shouldDisplayIcon === true){
+        menuOptions.push(
+          <MenuItem key={extensibleViews[view]['viewName'] + 'Menu'} to={'/' + extensibleViews[view]['viewName']}
+                    label={extensibleViews[view]['displayName']}
+                    iconClass={'button-icon ' + extensibleViews[view]['iconClass']}/>
+        );
+      } 
     }
 
     let secondaryTitleClass = 'secondary-header';
index 192c11d..4bffc88 100644 (file)
@@ -26,7 +26,7 @@ import VnfSearch from './vnfSearch/VnfSearch.jsx';
 import MainScreenHeader from './MainScreenHeader.jsx';
 import {decryptParamsForView, changeUrlAddress} from 'utils/Routes.js';
 import {isEmpty} from 'lodash';
-
+import {genericRequest} from 'app/networking/NetworkCalls.js';
 import {
   Route,
   HashRouter as Router,
@@ -95,15 +95,20 @@ class MainScreenWrapper extends Component {
     let customViewList = [];
     extensibleViews.forEach(function(view,key) {
 
-      let path;
-      if(isEmpty(extensibleViews[key]['routePath'])){
+      let path = ''
+          , extKey = ''
+          ;
+      if(isEmpty(extensibleViews[key]['viewParams'])){
         path = '/' + view.viewName + '/:extensibleViewParams?';
+        extKey = view.viewName + 'Route';
       } else {
-        path = '/' + view.viewName  + view.routePath + '/:extensibleViewParams?';
+        path = '/' + view.viewName  + view.viewParams;
+        extKey = view.viewName + view.viewParams + 'Route'
       }
+
       var renderComponent = (props) => {
         let viewParams = {};
-        if(props.match.params.extensibleViewParams !== undefined) {
+        if(isEmpty(extensibleViews[key]['viewParams']) && props.match.params.extensibleViewParams !== undefined) {
           viewParams = decryptParamsForView(props.match.params.extensibleViewParams);
         }
 
@@ -124,17 +129,25 @@ class MainScreenWrapper extends Component {
               changeRouteCallback = {(routeParam, historyObj) => {
                 changeUrlAddress(routeParam, historyObj);
               }}
+              networkingCallbackPromise = {(url, relativeURL, httpMethodType) => {
+                return genericRequest(url, relativeURL, httpMethodType);
+              }}
               viewName={view.displayName}
               viewData={extensibleViewNetworkCallbackData}
               viewParams={viewParams}/>
           );
         }
       };
-
-      customViewList.push(
-          <Route key={extensibleViews[key]['viewName'] + 'Route'} path={path}
-             render={renderComponent}/>
+      if(isEmpty(extensibleViews[key]['isExact']) && !extensibleViews[key]['isExact']){
+        customViewList.push(
+          <Route key={extKey} path={path} render={renderComponent}/>
       );
+      } else {
+        customViewList.push(
+          <Route key={extKey} exact path={path} render={renderComponent}/>
+      );
+      }
+      
     });
 
     return (
index 28e61d3..3ca3ef6 100644 (file)
@@ -21,7 +21,6 @@
 // Import section (used as anchor to add extension imports)
 
 let components = {};
-
 // Components section (used as an anchor to add extension components)
 
 export default components;
index af343e1..63c08ed 100644 (file)
@@ -18,6 +18,9 @@
  * limitations under the License.
  * ============LICENSE_END=========================================================
  */
+
+import {BASE_URL} from 'app/networking/NetworkConstants.js';
+
 function fetchRequest(URL, POST, POST_HEADER, BODY) {
   return fetch(URL, {
     credentials: 'same-origin',
@@ -42,13 +45,34 @@ function getRequest(URL, GET) {
   return fetch(URL, {
     credentials: 'same-origin',
     method: GET
-  });
+  }).then(
+    (response) => response.json()
+  );
 }
 
+const genericRequest = (url, relativeURL, httpMethodType) => {
+  let URL;
+  if(relativeURL){
+    URL = BASE_URL.concat(url);
+  } else {
+    URL = url;
+  }
+  switch(httpMethodType){
+    case 'GET':
+      return fetch(URL, {
+        credentials: 'same-origin',
+        method: 'GET'
+      }).then(
+        (response) => response.json()
+      );
+  }
+};
+
 module.exports = {
   fetchRequest: fetchRequest,
   fetchRequestObj: fetchRequestObj,
-  getRequest: getRequest
+  getRequest: getRequest,
+  genericRequest: genericRequest
 };