Revert "BUG-410 -- update RIFT platform"
[osm/UI.git] / skyquake / plugins / launchpad / src / recordViewer / recordNavigator.jsx
1
2 /*
3  * 
4  *   Copyright 2016 RIFT.IO Inc
5  *
6  *   Licensed under the Apache License, Version 2.0 (the "License");
7  *   you may not use this file except in compliance with the License.
8  *   You may obtain a copy of the License at
9  *
10  *       http://www.apache.org/licenses/LICENSE-2.0
11  *
12  *   Unless required by applicable law or agreed to in writing, software
13  *   distributed under the License is distributed on an "AS IS" BASIS,
14  *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  *   See the License for the specific language governing permissions and
16  *   limitations under the License.
17  *
18  */
19 import React from 'react';
20 import RecordViewActions from './recordViewActions.js';
21 import LoadingIndicator from 'widgets/loading-indicator/loadingIndicator.jsx';
22 import DashboardCard from 'widgets/dashboard_card/dashboard_card.jsx';
23 import Utils from 'utils/utils.js';
24
25 import './recordNavigator.scss';
26
27 export default class RecordNavigator extends React.Component{
28   constructor(props) {
29     super(props)
30   }
31   handleImageError = (e) => {
32       console.log('Bad logo path, using default');
33       e.target.src = require('style/img/catalog-default.svg');
34   }
35
36   getDescriptorTypeFromRecordType = (recordType) => {
37       if (recordType == 'nsr') {
38           return 'nsd';
39       } else if (recordType == 'vnfr') {
40           return 'vnfd';
41       }
42
43       return null;
44   }
45
46   render(){
47     let navClass = 'catalogItems';
48
49     let self = this;
50     let html;
51     let className = this.props.isLoading ? 'loading' : '';
52     let nav = [];
53
54     this.props.nav.map(function(n, k) {
55       let itemClassName = navClass + '_item';
56       let catalog_name = (n.type == 'nsr' ? <span>({n.nsd_name})</span> : '');
57       let scalingGroupClass = '';
58       let scalingGroupTitleClass = '';
59       let scalingGroupTitle = '';
60       let navObj = [];
61       if (n.scalingGroupName) {
62         scalingGroupClass = navClass + ' -is-scaled';
63         scalingGroupTitleClass = scalingGroupClass + '_title';
64         scalingGroupTitle = n.scalingGroupName + '_' + n.scalingGroupInstanceId;
65         n.vnfr && n.vnfr.map((vnfr, vnfrIndex) => {
66           let iClassName = itemClassName;
67           if(vnfr.id == self.props.activeNavID) {
68             iClassName += ' -is-selected';
69           }
70           navObj.push(
71             <div key={'id' + k + '-' + vnfr.id}  onClick={self.props.loadRecord.bind(self,vnfr)} className={iClassName}>
72               <img
73                   onError={self.handleImageError}
74                   src={Utils.cleanImageDataURI(vnfr.logo, self.getDescriptorTypeFromRecordType(vnfr.type), vnfr.logoId)}
75               />
76               <section id={vnfr.id}>
77               <h1 title={vnfr.name}>{vnfr.name}</h1>
78                 <h2>{vnfr.type}</h2>
79               </section>
80             </div>
81           )
82         });
83       } else {
84         if(n.id == self.props.activeNavID) {
85           itemClassName += ' -is-selected';
86         }
87         navObj.push(
88           <div key={'id' + k + '-' + n.id}  onClick={self.props.loadRecord.bind(self,n)} className={itemClassName}>
89             <img
90                 onError={self.handleImageError}
91                 src={Utils.cleanImageDataURI(n.logo, self.getDescriptorTypeFromRecordType(n.type), n.logoId)}
92             />
93             <section id={n.id}>
94             <h1 title={n.name}>{n.name}</h1>
95               <h2>{n.type}</h2>
96             </section>
97           </div>
98         );
99       }
100       nav.push(
101         <li className={scalingGroupClass} key={"scalingGroupTile-" + k}>
102           <div className={scalingGroupTitleClass}>
103             {scalingGroupTitle}
104           </div>
105           {navObj}
106         </li>
107       )
108     })
109     if(this.props.isLoading) {
110         html = <DashboardCard className="loading" showHeader={true} title="Loading..."><LoadingIndicator size={10} show={true} /></DashboardCard>
111     } else {
112         html = (
113           <DashboardCard showHeader={true} title="Select Record" className={"recordNavigator" + className}>
114             <ul className="catalogItems">
115               {
116                 nav
117               }
118             </ul>
119           </DashboardCard>
120         );
121     }
122     return html;
123   }
124 }
125 RecordNavigator.defaultProps = {
126   nav: []
127 }
128
129