Adding filter bar
[aai/sparky-fe.git] / src / app / MainScreenWrapper.jsx
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 import React, {Component} from 'react';
24 import {connect} from 'react-redux';
25 import * as Extensibility from './extensibility/index.js';
26 import TierSupport from './tierSupport/TierSupport.jsx';
27 import VnfSearch from './vnfSearch/VnfSearch.jsx';
28 import MainScreenHeader from './MainScreenHeader.jsx';
29 import {decryptParamsForView, changeUrlAddress} from 'utils/Routes.js';
30
31
32 import {
33   Route,
34   HashRouter as Router,
35   Switch,
36   Redirect
37 } from 'react-router-dom';
38
39 import {
40   windowResize,
41   extensibleViewNetworkCallback,
42   extensibleViewMessageCallback
43 } from './MainScreenWrapperActionHelper.js';
44
45 import extensibleViews from 'resources/views/extensibleViews.json';
46
47 const mapStateToProps = ({mainWrapper}) => {
48   let {
49     showMenu = false,
50     toggleButtonActive = false,
51     extensibleViewNetworkCallbackData = {}
52   } = mainWrapper;
53
54   return {
55     showMenu,
56     toggleButtonActive,
57     extensibleViewNetworkCallbackData
58   };
59 };
60
61 const mapActionsToProps = (dispatch) => {
62   return {
63     onWindowSizeChange: () => dispatch(windowResize()),
64     onExtensibleViewNetworkCallback: (apiUrl,body,viewName,curViewData) =>  {
65       dispatch(extensibleViewNetworkCallback(apiUrl,body,viewName,curViewData));
66     },
67     onExtensibleViewMessageCallback: (message, messageSevirity) => {
68       dispatch(extensibleViewMessageCallback(message, messageSevirity));
69     }
70   };
71 };
72
73 class MainScreenWrapper extends Component {
74
75   constructor() {
76     super();
77     window.addEventListener('resize', () => {
78       this.props.onWindowSizeChange();
79     });
80
81   }
82
83
84   render() {
85
86     const {
87       onExtensibleViewNetworkCallback,
88       extensibleViewNetworkCallbackData,
89       onExtensibleViewMessageCallback
90     } = this.props;
91
92     let customViewList = [];
93     extensibleViews.forEach(function(view,key){
94       var renderComponent = (props) => {
95         let viewParams = {};
96         if(props.match.params.extensibleViewParams !== undefined) {
97           viewParams = decryptParamsForView(props.match.params.extensibleViewParams);
98         }
99
100         if (Extensibility.default.hasOwnProperty(view.componentName)) {
101           let Component = Extensibility.default[view.componentName];
102           return (
103             <Component
104               {...props}
105               networkingCallback={(apiUrl, body, paramName,curViewData) => {
106                 onExtensibleViewNetworkCallback(apiUrl, body, paramName, curViewData);
107               }}
108               messagingCallback ={(message, messageSevirity) => {
109                 onExtensibleViewMessageCallback(message, messageSevirity);
110               }}
111               changeRouteCallback = {(routeParam, historyObj) => {
112                 changeUrlAddress(routeParam, historyObj);
113               }}
114               viewName={view.displayName}
115               viewData={extensibleViewNetworkCallbackData}
116               viewParams={viewParams}/>
117           );
118         }
119       };
120
121       customViewList.push(
122           <Route key={extensibleViews[key]['viewName'] + 'Route'} path={'/' + extensibleViews[key]['viewName'] + '/:extensibleViewParams?' }
123              render={renderComponent}/>
124       );
125     });
126
127     return (
128       <Router>
129         <div className='main-app-container'>
130           <Switch>
131             <Redirect from='/' exact to='/schema'/>
132           </Switch>
133           <Route key='MainScreenHeaderRoute' path='/:externalUrl?' component={MainScreenHeader}/>
134           <Route key='TierSupportRoue' path='/schema/:viParam?' component={TierSupport}/>
135           <Route key='VnfSearchRoute' path='/vnfSearch/:filters?' component={VnfSearch}/>
136           {customViewList}
137         </div>
138       </Router>
139     );
140   }
141 }
142
143 export default connect(mapStateToProps, mapActionsToProps)(MainScreenWrapper);