2c0877a7787ebfa8395264b629b878691888bd8f
[osm/riftware.git] /
1 /**
2  * Created by onvelocity on 3/4/16.
3  */
4 'use strict';
5 import React from 'react'
6 import ClassNames from 'classnames'
7 import CatalogItemsActions from '../../actions/CatalogItemsActions'
8 import DescriptorModelFactory from '../../libraries/model/DescriptorModelFactory'
9 import onHoverHighlightConnectionPoint from './onHoverHighlightConnectionPoint'
10 import '../../styles/ConnectionPointSelector.scss'
11 export default function ConnectionPointSelector(props) {
12
13         const containers = props.containers || [];
14         const serviceChain = props.serviceChain || 'SF';
15         const connectionPointStyle = props.style || {};
16         const isDisabled = props.isDisabled;
17         const disabledMessage = props.disabledMessage || '';
18
19         // events
20         const onExitEditPathMode = props.onExitEditPathMode || (() => {});
21         const onAddConnectionPointRef = props.onAddConnectionPointRef || (() => {});
22
23         function mapConnectionPoint(connector) {
24                 const cpNumber = connector.cpNumber;
25                 return (
26                         <div key={connector.uid} className={ClassNames(connector.className, 'connection-point')} style={connectionPointStyle}
27                                  onClick={onAddConnectionPointRef.bind(null, connector)}
28                                  onMouseEnter={onHoverHighlightConnectionPoint.bind(null, cpNumber)}
29                                  onMouseLeave={onHoverHighlightConnectionPoint.bind(null, cpNumber)}><small>cp{cpNumber}</small></div>
30                 );
31         }
32
33         function mapConnectionPointsForConstituentVnfd(cvnfd, i) {
34                 return (
35                         <div key={i} className={ClassNames(cvnfd.className, 'vnfd')}>
36                                 <small className="vnfd-title">{cvnfd.title}</small>
37                                 <div className="connectors">
38                                         {cvnfd.connectors.map(mapConnectionPoint)}
39                                 </div>
40                         </div>
41                 );
42         }
43
44         if (isDisabled) {
45                 return (<div>{disabledMessage}</div>)
46         }
47
48         return (
49                 <div className="ConnectionPointSelector selection">
50                         <div className="vnfd-list">
51                                 {containers.filter(d => DescriptorModelFactory.isConstituentVnfdWithServiceChain(d, serviceChain)).map(mapConnectionPointsForConstituentVnfd)}
52                                 <small className="Button"
53                                            onClick={onExitEditPathMode}>done
54                                 </small>
55                         </div>
56                 </div>
57         )
58
59 }