4 * Copyright 2016 RIFT.IO Inc
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
10 * http://www.apache.org/licenses/LICENSE-2.0
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.
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';
25 import './recordNavigator.scss';
27 export default class RecordNavigator extends React.Component{
31 handleImageError = (e) => {
32 console.log('Bad logo path, using default');
33 e.target.src = require('style/img/catalog-default.svg');
36 getDescriptorTypeFromRecordType = (recordType) => {
37 if (recordType == 'nsr') {
39 } else if (recordType == 'vnfr') {
46 getDescriptorIdFromRecord = (record) => {
47 if (record.type && record.type == 'nsr') {
48 return nsr.nsd && nsr.nsd.id;
49 } else if (record.type && record.type == 'vnfr') {
50 return vnfr.vnfd && vnfr.vnfd.id;
57 let navClass = 'catalogItems';
61 let className = this.props.isLoading ? 'loading' : '';
64 this.props.nav.map(function(n, k) {
65 let itemClassName = navClass + '_item';
66 let catalog_name = (n.type == 'nsr' ? <span>({n.nsd_name})</span> : '');
67 let scalingGroupClass = '';
68 let scalingGroupTitleClass = '';
69 let scalingGroupTitle = '';
71 if (n.scalingGroupName) {
72 scalingGroupClass = navClass + ' -is-scaled';
73 scalingGroupTitleClass = scalingGroupClass + '_title';
74 scalingGroupTitle = n.scalingGroupName + '_' + n.scalingGroupInstanceId;
75 n.vnfr && n.vnfr.map((vnfr, vnfrIndex) => {
76 let iClassName = itemClassName;
77 if(vnfr.id == self.props.activeNavID) {
78 iClassName += ' -is-selected';
81 <div key={'id' + k + '-' + vnfr.id} onClick={self.props.loadRecord.bind(self,vnfr)} className={iClassName}>
83 onError={self.handleImageError}
84 src={Utils.cleanImageDataURI(vnfr.logo, self.getDescriptorTypeFromRecordType(vnfr.type), getDescriptorIdFromRecord(vnfr))}
86 <section id={vnfr.id}>
87 <h1 title={vnfr.name}>{vnfr.name}</h1>
94 if(n.id == self.props.activeNavID) {
95 itemClassName += ' -is-selected';
98 <div key={'id' + k + '-' + n.id} onClick={self.props.loadRecord.bind(self,n)} className={itemClassName}>
100 onError={self.handleImageError}
101 src={Utils.cleanImageDataURI(n.logo, self.getDescriptorTypeFromRecordType(n.type), self.getDescriptorIdFromRecord(n))}
104 <h1 title={n.name}>{n.name}</h1>
111 <li className={scalingGroupClass} key={"scalingGroupTile-" + k}>
112 <div className={scalingGroupTitleClass}>
119 if(this.props.isLoading) {
120 html = <DashboardCard className="loading" showHeader={true} title="Loading..."><LoadingIndicator size={10} show={true} /></DashboardCard>
123 <DashboardCard showHeader={true} title="Select Record" className={"recordNavigator" + className}>
124 <ul className="catalogItems">
135 RecordNavigator.defaultProps = {