1 import React from 'react';
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';
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';
14 class LicenseKeyGroupsListEditorView extends React.Component {
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
27 static defaultProps = {
28 licenseKeyGroupsList: []
36 let {licenseModelId, vendorName, isReadOnlyMode, isDisplayModal, isModalInEditMode} = this.props;
37 let {onAddLicenseKeyGroupClick} = this.props;
38 const {localFilter} = this.state;
41 <div className='license-key-groups-list-editor'>
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)))}
51 <Modal show={isDisplayModal} bsSize='large' animation={true} className='license-key-groups-modal'>
53 <Modal.Title>{`${isModalInEditMode ? i18n('Edit License Key Group') : i18n('Create New License Key Group')}`}</Modal.Title>
58 <LicenseKeyGroupsEditor licenseModelId={licenseModelId} isReadOnlyMode={isReadOnlyMode}/>
63 <LicenseKeyGroupsConfirmationModal licenseModelId={licenseModelId}/>
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);
79 return licenseKeyGroupsList;
83 renderLicenseKeyGroupListItem(licenseKeyGroup, isReadOnlyMode) {
84 let {id, name, description, operationalScope, type} = licenseKeyGroup;
85 let {onEditLicenseKeyGroupClick, onDeleteLicenseKeyGroupClick} = this.props;
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>
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>
102 <div className='title'>{i18n('Type')}</div>
103 <div className='text type'>{InputOptions.getTitleByName(optionsInputValues, type)}</div>
105 <div className='list-editor-item-view-field'>
106 <div className='title'>{i18n('Description')}</div>
107 <div className='text description'>{description}</div>
109 </ListEditorItemView>
113 getOperationalScopes(operationalScope) {
114 if(operationalScope.choices.toString() === i18n(optionInputOther.OTHER) && operationalScope.other !== '') {
115 return operationalScope.other;
118 let allOpScopes = '';
119 for (let opScope of operationalScope.choices) {
120 allOpScopes += allOpScopes === '' ? InputOptions.getTitleByName(optionsInputValues, opScope) : `, ${InputOptions.getTitleByName(optionsInputValues, opScope)}`;
127 if (item === undefined) {
129 } //TODO fix it later
131 return item ? item.choice === optionInputOther.OTHER ? item.other : InputOptions.getTitleByName(optionsInputValues, item.choice) : '';
135 export default LicenseKeyGroupsListEditorView;