Add collaboration feature
[sdc.git] / openecomp-ui / src / sdc-app / onboarding / softwareProduct / deployment / SoftwareProductDeploymentView.jsx
1 /*!
2  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
13  * or implied. See the License for the specific language governing
14  * permissions and limitations under the License.
15  */
16 import React from 'react';
17 import PropTypes from 'prop-types';
18 import i18n from 'nfvo-utils/i18n/i18n.js';
19
20 import ListEditorView from 'nfvo-components/listEditor/ListEditorView.jsx';
21 import ListEditorItemView from 'nfvo-components/listEditor/ListEditorItemView.jsx';
22 import ListEditorItemViewField from 'nfvo-components/listEditor/ListEditorItemViewField.jsx';
23
24 export default class SoftwareProductDeployment extends React.Component {
25         state = {
26                 localFilter: ''
27         };
28
29         static propTypes = {
30                 onAddDeployment: PropTypes.func.isRequired,
31                 onDeleteDeployment: PropTypes.func.isRequired,
32                 onEditDeployment: PropTypes.func.isRequired,
33                 isReadOnlyMode: PropTypes.bool.isRequired
34         };
35
36         render() {
37                 return (
38                         <div>
39                                 {this.renderList()}
40                         </div>
41                 );
42         }
43
44         renderList() {
45                 let {onAddDeployment, isReadOnlyMode, componentsList} = this.props;
46                 return (
47                         <ListEditorView
48                                 plusButtonTitle={i18n('Add Deployment Flavor')}
49                                 filterValue={this.state.localFilter}
50                                 placeholder={i18n('Filter Deployment')}
51                                 onAdd={() => onAddDeployment(componentsList)}
52                                 isReadOnlyMode={isReadOnlyMode}
53                                 title={i18n('Deployment Flavors')}
54                                 onFilter={value => this.setState({localFilter: value})}
55                                 twoColumns>
56                                 {this.filterList().map(deploymentFlavor => this.renderListItem(deploymentFlavor, isReadOnlyMode))}
57                         </ListEditorView>
58                 );
59         }
60
61         renderListItem(deploymentFlavor, isReadOnlyMode) {
62                 let {id, model, description} = deploymentFlavor;
63                 let {onEditDeployment, onDeleteDeployment, componentsList} =  this.props;
64                 return (
65                         <ListEditorItemView
66                                 key={id}
67                                 className='list-editor-item-view'
68                                 isReadOnlyMode={isReadOnlyMode}
69                                 onSelect={() => onEditDeployment(deploymentFlavor, componentsList)}
70                                 onDelete={() => onDeleteDeployment(deploymentFlavor)}>
71                                 <ListEditorItemViewField>
72                                         <div className='model'>{model}</div>
73                                 </ListEditorItemViewField>
74                                 <ListEditorItemViewField>
75                                         <div className='description'>{description}</div>
76                                 </ListEditorItemViewField>
77                         </ListEditorItemView>
78                 );
79         }
80
81         filterList() {
82                 let {deploymentFlavors} = this.props;
83                 let {localFilter} = this.state;
84
85                 if (localFilter.trim()) {
86                         const filter = new RegExp(escape(localFilter), 'i');
87                         return deploymentFlavors.filter(({model = '', description = ''}) => {
88                                 return escape(model).match(filter) || escape(description).match(filter);
89                         });
90                 }
91                 else {
92                         return deploymentFlavors;
93                 }
94         }
95 }