X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=skyquake%2Fplugins%2Flaunchpad%2Fsrc%2Finstantiate%2FcatalogCard.jsx;fp=skyquake%2Fplugins%2Flaunchpad%2Fsrc%2Finstantiate%2FcatalogCard.jsx;h=d44bd2eca16b3a940fdeaa8ea6454b4b765ac8dc;hb=e29efc315df33d546237e270470916e26df391d6;hp=0000000000000000000000000000000000000000;hpb=9c5e457509ba5a1822c316635c6308874e61b4b9;p=osm%2FUI.git diff --git a/skyquake/plugins/launchpad/src/instantiate/catalogCard.jsx b/skyquake/plugins/launchpad/src/instantiate/catalogCard.jsx new file mode 100644 index 000000000..d44bd2eca --- /dev/null +++ b/skyquake/plugins/launchpad/src/instantiate/catalogCard.jsx @@ -0,0 +1,196 @@ +/* + * + * Copyright 2016 RIFT.IO Inc + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +import './catalogCard.scss'; +import 'style/common.scss'; +import React, {Component} from 'react'; +export default class CatalogCard extends Component { + constructor(props) { + super(props); + this.state = {}; + this.state.isExpanded = false; + } + hideIt = (e) => { + document.querySelector('body').removeEventListener('click', this.hideIt); + if(e.target.parentElement.classList.contains('CatalogCard-info--expanded') || e.target.classList.contains('CatalogCard-info--expanded')) { + e.stopPropagation(); + } + this.setState({ + isExpanded: false + }); + } + handleImageError = (e) => { + console.log('Bad logo path, using default'); + e.target.src = require('style/img/catalog-default.svg'); + } + toggleDetailsDisplay = (e) => { + let self = this; + let isExpanded = this.state.isExpanded; + e.stopPropagation(); + if(!isExpanded) { + document.querySelector('body').addEventListener('click', this.hideIt); + self.setState({ + isExpanded: true + }); + } + } + detailsHTML = (descriptor) => { + let self = this; + return ( +
+
+
+ VNFDs +
+ { + ( + descriptor['constituent-vnfd'] && + (descriptor['constituent-vnfd'].length > 0) + ) ? + descriptor['constituent-vnfd'] && descriptor['constituent-vnfd'].map(function(v,i) { + return ( +
+ + {v['name']} +
+ ) + }) + : 'None' + } +
+
+
+ VLDs +
+ { + ( + descriptor['vld'] && + (descriptor['vld'].length > 0) + ) ? + descriptor['vld'] && descriptor['vld'].map(function(v,i) { + return ( +
+ {v['short-name']} +
+ ) + }) + : 'None' + } +
+
+
+ VNFFGDs +
+ { + ( + descriptor['vnffgd'] && + (descriptor['vnffgd'].length > 0) + ) ? + descriptor['vnffgd'] && descriptor['vnffgd'].map(function(v,i) { + return ( +
+ {v['short-name']} +
+ ) + }) + : 'None' + } +
+
+ ); + } + componentWillUnmount() { + document.querySelector('body').removeEventListener('click', this.hideIt); + } + render() { + let {className, descriptor, isActive, isOpen, onCloseCard,...props} = this.props; + let openTool = isOpen ? null : + className = "CatalogCard " + buildClass(this.props); + return ( +
+ +
+
+
+ {descriptor.name} +
+
+ {descriptor['short-name']} +
+
+ {descriptor['vendor']} / {descriptor['version']} +
+
+
+ {descriptor['description']} +
+
+
VNFDs:
+
{descriptor['constituent-vnfd'] && descriptor['constituent-vnfd'].length || 0}
+
VLDs:
+
{descriptor['vld'] && descriptor['vld'].length || 0}
+
VNFFGDs:
+
{descriptor['vnffgd'] && descriptor['vnffgd'].length || 0}
+
+ {this.detailsHTML(descriptor)} +
+
+ {openTool} +
+ ) + } +} +CatalogCard.defaultProps = { + className: null, + descriptor: {} +} + +function buildClass(props) { + let className = ''; + if(props.isSelected) { + className += ' CatalogCard-is-selected'; + } + if(props.isActive) { + className += ' CatalogCard-is-active'; + } + return className; +} + +function cardHandler(element) { + this.handleEvent = function(e) { + '' + } +} + +function cleanDataURI(imageString, type, id) { + if (/\bbase64\b/g.test(imageString)) { + return imageString; + } else if (/<\?xml\b/g.test(imageString)) { + const imgStr = imageString.substring(imageString.indexOf('