1 import React from 'react';
3 import i18n from 'nfvo-utils/i18n/i18n.js';
4 import Modal from 'nfvo-components/modal/Modal.jsx';
6 import ListEditorView from 'nfvo-components/listEditor/ListEditorView.jsx';
7 import ListEditorItemView from 'nfvo-components/listEditor/ListEditorItemView.jsx';
8 import LicenseAgreementEditor from './LicenseAgreementEditor.js';
9 import InputOptions, {other as optionInputOther} from 'nfvo-components/input/inputOptions/InputOptions.jsx';
10 import {optionsInputValues} from './LicenseAgreementConstants';
11 import LicenseAgreementConfirmationModal from './LicenseAgreementConfirmationModal.jsx';
14 class LicenseAgreementListEditorView extends React.Component {
16 vendorName: React.PropTypes.string,
17 licenseModelId: React.PropTypes.string.isRequired,
18 licenseAgreementList: React.PropTypes.array,
19 isReadOnlyMode: React.PropTypes.bool.isRequired,
20 isDisplayModal: React.PropTypes.bool,
21 isModalInEditMode: React.PropTypes.bool,
22 onAddLicenseAgreementClick: React.PropTypes.func,
23 onEditLicenseAgreementClick: React.PropTypes.func,
24 onDeleteLicenseAgreement: React.PropTypes.func,
25 onCallVCAction: React.PropTypes.func
28 static defaultProps = {
29 licenseAgreementList: []
37 const {licenseModelId, vendorName, isReadOnlyMode, isDisplayModal, isModalInEditMode} = this.props;
38 const {onAddLicenseAgreementClick} = this.props;
39 const {localFilter} = this.state;
42 <div className='license-agreement-list-editor'>
44 title={i18n('License Agreements for {vendorName} License Model', {vendorName})}
45 plusButtonTitle={i18n('Add License Agreement')}
46 onAdd={onAddLicenseAgreementClick}
47 filterValue={localFilter}
48 onFilter={filter => this.setState({localFilter: filter})}
49 isReadOnlyMode={isReadOnlyMode}>
50 {this.filterList().map(licenseAgreement => this.renderLicenseAgreementListItem(licenseAgreement, isReadOnlyMode))}
52 <Modal show={isDisplayModal} bsSize='large' animation={true} className='license-agreement-modal'>
54 <Modal.Title>{`${isModalInEditMode ? i18n('Edit License Agreement') : i18n('Create New License Agreement')}`}</Modal.Title>
59 <LicenseAgreementEditor licenseModelId={licenseModelId} isReadOnlyMode={isReadOnlyMode} />
64 <LicenseAgreementConfirmationModal licenseModelId={licenseModelId}/>
71 let {licenseAgreementList} = this.props;
72 let {localFilter} = this.state;
73 if (localFilter.trim()) {
74 const filter = new RegExp(escape(localFilter), 'i');
75 return licenseAgreementList.filter(({name = '', description = '', licenseTerm = ''}) => {
76 return escape(name).match(filter) || escape(description).match(filter) || escape(this.extractValue(licenseTerm)).match(filter);
80 return licenseAgreementList;
84 renderLicenseAgreementListItem(licenseAgreement, isReadOnlyMode) {
85 let {id, name, description, licenseTerm, featureGroupsIds = []} = licenseAgreement;
86 let {onEditLicenseAgreementClick, onDeleteLicenseAgreement} = this.props;
90 onSelect={() => onEditLicenseAgreementClick(licenseAgreement)}
91 onDelete={() => onDeleteLicenseAgreement(licenseAgreement)}
92 className='list-editor-item-view'
93 isReadOnlyMode={isReadOnlyMode}>
94 <div className='list-editor-item-view-field'>
95 <div className='title'>{i18n('Name')}</div>
96 <div className='text name'>{name}</div>
98 <div className='list-editor-item-view-field'>
99 <div className='list-editor-item-view-field-tight'>
100 <div className='title'>{i18n('Type')}</div>
101 <div className='text type'>{this.extractValue(licenseTerm)}</div>
103 <div className='list-editor-item-view-field-tight'>
104 <div className='title'>{i18n('Feature')}</div>
105 <div className='title'>{i18n('Groups')}</div>
106 <div className='feature-groups-count'>{featureGroupsIds.length}</div>
109 <div className='list-editor-item-view-field'>
110 <div className='title'>{i18n('Description')}</div>
111 <div className='text description'>{description}</div>
113 </ListEditorItemView>
118 if (item === undefined) {
120 } //TODO fix it later
122 return item ? item.choice === optionInputOther.OTHER ? item.other : InputOptions.getTitleByName(optionsInputValues, item.choice) : '';
126 export default LicenseAgreementListEditorView;