Add new code new version
[sdc.git] / openecomp-ui / src / sdc-app / onboarding / softwareProduct / components / SoftwareProductComponentsListView.jsx
1 import React from 'react';
2
3 import i18n from 'nfvo-utils/i18n/i18n.js';
4 import ListEditorView from 'nfvo-components/listEditor/ListEditorView.jsx';
5 import ListEditorItemView from 'nfvo-components/listEditor/ListEditorItemView.jsx';
6
7 const ComponentPropType = React.PropTypes.shape({
8         id: React.PropTypes.string,
9         name: React.PropTypes.string,
10         displayName: React.PropTypes.string,
11         description: React.PropTypes.string
12 });
13
14 class SoftwareProductComponentsListView extends React.Component {
15
16         state = {
17                 localFilter: ''
18         };
19
20         static propTypes = {
21                 isReadOnlyMode: React.PropTypes.bool,
22                 componentsList: React.PropTypes.arrayOf(ComponentPropType),
23                 onComponentSelect: React.PropTypes.func
24         };
25
26         render() {
27                 let {componentsList = []} =  this.props;
28                 return (
29                         <div className=''>
30                                 {
31                                         componentsList.length > 0 && this.renderComponents()
32                                 }
33                         </div>
34                 );
35         }
36
37         renderComponents() {
38                 const {localFilter} = this.state;
39                 let {isReadOnlyMode} =  this.props;
40
41                 return (
42                         <ListEditorView
43                                 title={i18n('Virtual Function Components')}
44                                 filterValue={localFilter}
45                                 placeholder={i18n('Filter Components')}
46                                 onFilter={filter => this.setState({localFilter: filter})}
47                                 isReadOnlyMode={isReadOnlyMode}>
48                                 {this.filterList().map(component => this.renderComponentsListItem(component))}
49                         </ListEditorView>
50                 );
51         }
52
53         renderComponentsListItem(component) {
54                 let {id: componentId, name, displayName, description = ''} = component;
55                 let {currentSoftwareProduct: {id}, onComponentSelect} = this.props;
56                 return (
57                         <ListEditorItemView
58                                 key={name + Math.floor(Math.random() * (100 - 1) + 1).toString()}
59                                 className='list-editor-item-view'
60                                 onSelect={() => onComponentSelect({id, componentId})}>
61                                 <div className='list-editor-item-view-field'>
62                                         <div className='title'>{i18n('Component')}</div>
63                                         <div className='name'>{displayName}</div>
64                                 </div>
65                                 <div className='list-editor-item-view-field'>
66                                         <div className='title'>{i18n('Description')}</div>
67                                         <div className='description'>{description}</div>
68                                 </div>
69                         </ListEditorItemView>
70                 );
71         }
72
73         filterList() {
74                 let {componentsList = []} = this.props;
75
76                 let {localFilter} = this.state;
77                 if (localFilter.trim()) {
78                         const filter = new RegExp(escape(localFilter), 'i');
79                         return componentsList.filter(({displayName = '', description = ''}) => {
80                                 return escape(displayName).match(filter) || escape(description).match(filter);
81                         });
82                 }
83                 else {
84                         return componentsList;
85                 }
86         }
87 }
88
89 export default SoftwareProductComponentsListView;