From b68cd9cee606372747f6fee4a864de994b0518a7 Mon Sep 17 00:00:00 2001 From: "Arul.Nambi" Date: Tue, 4 Sep 2018 16:18:34 -0400 Subject: Add network call as promise for ext views 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 --- resources/views/extensibleViews.json | 2 +- src/app/MainScreenHeader.jsx | 19 +++++++++++++------ src/app/MainScreenWrapper.jsx | 31 ++++++++++++++++++++++--------- src/app/extensibility/index.js | 1 - src/app/networking/NetworkCalls.js | 28 ++++++++++++++++++++++++++-- 5 files changed, 62 insertions(+), 19 deletions(-) diff --git a/resources/views/extensibleViews.json b/resources/views/extensibleViews.json index 32960f8..0d4f101 100644 --- a/resources/views/extensibleViews.json +++ b/resources/views/extensibleViews.json @@ -1,2 +1,2 @@ [ -] \ No newline at end of file +] diff --git a/src/app/MainScreenHeader.jsx b/src/app/MainScreenHeader.jsx index ec1efda..a3225e7 100644 --- a/src/app/MainScreenHeader.jsx +++ b/src/app/MainScreenHeader.jsx @@ -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( - - ); + let shouldDisplayIcon = false; + if(extensibleViews[view]['onlyRoute'] === undefined){ + shouldDisplayIcon = true; + } else if(extensibleViews[view]['onlyRoute'] === false){ + shouldDisplayIcon = true; + } + if(shouldDisplayIcon === true){ + menuOptions.push( + + ); + } } let secondaryTitleClass = 'secondary-header'; diff --git a/src/app/MainScreenWrapper.jsx b/src/app/MainScreenWrapper.jsx index 192c11d..4bffc88 100644 --- a/src/app/MainScreenWrapper.jsx +++ b/src/app/MainScreenWrapper.jsx @@ -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( - + if(isEmpty(extensibleViews[key]['isExact']) && !extensibleViews[key]['isExact']){ + customViewList.push( + ); + } else { + customViewList.push( + + ); + } + }); return ( diff --git a/src/app/extensibility/index.js b/src/app/extensibility/index.js index 28e61d3..3ca3ef6 100644 --- a/src/app/extensibility/index.js +++ b/src/app/extensibility/index.js @@ -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; diff --git a/src/app/networking/NetworkCalls.js b/src/app/networking/NetworkCalls.js index af343e1..63c08ed 100644 --- a/src/app/networking/NetworkCalls.js +++ b/src/app/networking/NetworkCalls.js @@ -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 }; -- cgit 1.2.3-korg