Add new code new version
[sdc.git] / openecomp-ui / src / sdc-app / onboarding / licenseModel / licenseKeyGroups / LicenseKeyGroupsListEditorView.jsx
1 import React from 'react';
2
3 import i18n from 'nfvo-utils/i18n/i18n.js';
4 import Modal from 'nfvo-components/modal/Modal.jsx';
5 import ListEditorView from 'nfvo-components/listEditor/ListEditorView.jsx';
6 import ListEditorItemView from 'nfvo-components/listEditor/ListEditorItemView.jsx';
7
8 import LicenseKeyGroupsEditor from './LicenseKeyGroupsEditor.js';
9 import InputOptions, {other as optionInputOther} from 'nfvo-components/input/inputOptions/InputOptions.jsx';
10 import {optionsInputValues} from './LicenseKeyGroupsConstants';
11 import LicenseKeyGroupsConfirmationModal from './LicenseKeyGroupsConfirmationModal.jsx';
12
13
14 class LicenseKeyGroupsListEditorView extends React.Component {
15         static propTypes = {
16                 vendorName: React.PropTypes.string,
17                 licenseModelId: React.PropTypes.string.isRequired,
18                 licenseKeyGroupsList: React.PropTypes.array,
19                 isReadOnlyMode: React.PropTypes.bool.isRequired,
20                 isDisplayModal: React.PropTypes.bool,
21                 isModalInEditMode: React.PropTypes.bool,
22                 onAddLicenseKeyGroupClick: React.PropTypes.func,
23                 onEditLicenseKeyGroupClick: React.PropTypes.func,
24                 onDeleteLicenseKeyGroupClick: React.PropTypes.func
25         };
26
27         static defaultProps = {
28                 licenseKeyGroupsList: []
29         };
30
31         state = {
32                 localFilter: ''
33         };
34
35         render() {
36                 let {licenseModelId, vendorName, isReadOnlyMode, isDisplayModal, isModalInEditMode} = this.props;
37                 let {onAddLicenseKeyGroupClick} = this.props;
38                 const {localFilter} = this.state;
39
40                 return (
41                         <div className='license-key-groups-list-editor'>
42                                 <ListEditorView
43                                         title={i18n('License Key Groups for {vendorName} License Model', {vendorName})}
44                                         plusButtonTitle={i18n('Add License Key Group')}
45                                         onAdd={onAddLicenseKeyGroupClick}
46                                         filterValue={localFilter}
47                                         onFilter={filter => this.setState({localFilter: filter})}
48                                         isReadOnlyMode={isReadOnlyMode}>
49                                         {this.filterList().map(licenseKeyGroup => (this.renderLicenseKeyGroupListItem(licenseKeyGroup, isReadOnlyMode)))}
50                                 </ListEditorView>
51                                 <Modal show={isDisplayModal} bsSize='large' animation={true} className='license-key-groups-modal'>
52                                         <Modal.Header>
53                                                 <Modal.Title>{`${isModalInEditMode ? i18n('Edit License Key Group') : i18n('Create New License Key Group')}`}</Modal.Title>
54                                         </Modal.Header>
55                                         <Modal.Body>
56                                                 {
57                                                         isDisplayModal && (
58                                                                 <LicenseKeyGroupsEditor licenseModelId={licenseModelId} isReadOnlyMode={isReadOnlyMode}/>
59                                                         )
60                                                 }
61                                         </Modal.Body>
62                                 </Modal>
63                                 <LicenseKeyGroupsConfirmationModal licenseModelId={licenseModelId}/>
64
65                         </div>
66                 );
67         }
68
69         filterList() {
70                 let {licenseKeyGroupsList} = this.props;
71                 let {localFilter} = this.state;
72                 if (localFilter.trim()) {
73                         const filter = new RegExp(escape(localFilter), 'i');
74                         return licenseKeyGroupsList.filter(({name = '', description = '', operationalScope = '', type = ''}) => {
75                                 return escape(name).match(filter) || escape(description).match(filter) || escape(this.extractValue(operationalScope)).match(filter) || escape(type).match(filter);
76                         });
77                 }
78                 else {
79                         return licenseKeyGroupsList;
80                 }
81         }
82
83         renderLicenseKeyGroupListItem(licenseKeyGroup, isReadOnlyMode) {
84                 let {id, name, description, operationalScope, type} = licenseKeyGroup;
85                 let {onEditLicenseKeyGroupClick, onDeleteLicenseKeyGroupClick} = this.props;
86                 return (
87                         <ListEditorItemView
88                                 key={id}
89                                 onSelect={() => onEditLicenseKeyGroupClick(licenseKeyGroup)}
90                                 onDelete={() => onDeleteLicenseKeyGroupClick(licenseKeyGroup)}
91                                 className='list-editor-item-view'
92                                 isReadOnlyMode={isReadOnlyMode}>
93                                 <div className='list-editor-item-view-field'>
94                                         <div className='title'>{i18n('Name')}</div>
95                                         <div className='text name'>{name}</div>
96                                 </div>
97
98                                 <div className='list-editor-item-view-field'>
99                                         <div className='title'>{i18n('Operational Scope')}</div>
100                                         <div className='text operational-scope'>{operationalScope && this.getOperationalScopes(operationalScope)}</div>
101
102                                         <div className='title'>{i18n('Type')}</div>
103                                         <div className='text type'>{InputOptions.getTitleByName(optionsInputValues, type)}</div>
104                                 </div>
105                                 <div className='list-editor-item-view-field'>
106                                         <div className='title'>{i18n('Description')}</div>
107                                         <div className='text description'>{description}</div>
108                                 </div>
109                         </ListEditorItemView>
110                 );
111         }
112
113         getOperationalScopes(operationalScope) {
114                 if(operationalScope.choices.toString() === i18n(optionInputOther.OTHER) && operationalScope.other !== '') {
115                         return operationalScope.other;
116                 }
117                 else {
118                         let allOpScopes = '';
119                         for (let opScope of operationalScope.choices) {
120                                 allOpScopes += allOpScopes === '' ? InputOptions.getTitleByName(optionsInputValues, opScope) : `, ${InputOptions.getTitleByName(optionsInputValues, opScope)}`;
121                         }
122                         return allOpScopes;
123                 }
124         }
125
126         extractValue(item) {
127                 if (item === undefined) {
128                         return '';
129                 } //TODO fix it later
130
131                 return item ? item.choice === optionInputOther.OTHER ? item.other : InputOptions.getTitleByName(optionsInputValues, item.choice) : '';
132         }
133 }
134
135 export default LicenseKeyGroupsListEditorView;
136
137
138