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