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