import React from 'react'; import i18n from 'nfvo-utils/i18n/i18n.js'; import Modal from 'nfvo-components/modal/Modal.jsx'; import ListEditorView from 'nfvo-components/listEditor/ListEditorView.jsx'; import ListEditorItemView from 'nfvo-components/listEditor/ListEditorItemView.jsx'; import FeatureGroupEditor from './FeatureGroupEditor.js'; import FeatureGroupsConfirmationModal from './FeatureGroupsConfirmationModal.jsx'; class FeatureGroupListEditorView extends React.Component { static propTypes = { vendorName: React.PropTypes.string, licenseModelId: React.PropTypes.string.isRequired, featureGroupsModal: React.PropTypes.shape({ show: React.PropTypes.bool, editMode: React.PropTypes.bool }), isReadOnlyMode: React.PropTypes.bool.isRequired, onAddFeatureGroupClick: React.PropTypes.func, onEditFeatureGroupClick: React.PropTypes.func, onDeleteFeatureGroupClick: React.PropTypes.func, onCancelFeatureGroupsEditor: React.PropTypes.func, featureGroupsList: React.PropTypes.array }; static defaultProps = { featureGroupsList: [], featureGroupsModal: { show: false, editMode: false } }; state = { localFilter: '' }; render() { let {vendorName, licenseModelId, featureGroupsModal, isReadOnlyMode, onAddFeatureGroupClick} = this.props; const {localFilter} = this.state; return (
this.setState({localFilter: filter})} onAdd={() => onAddFeatureGroupClick()} isReadOnlyMode={isReadOnlyMode}> {this.filterList().map(listItem => this.renderFeatureGroupListItem(listItem, isReadOnlyMode))} {`${featureGroupsModal.editMode ? i18n('Edit Feature Group') : i18n('Create New Feature Group')}`} this.closeFeatureGroupsEditor()} licenseModelId={licenseModelId} isReadOnlyMode={isReadOnlyMode}/>
); } renderFeatureGroupListItem(listItem, isReadOnlyMode) { let {name, description, entitlementPoolsIds = [], licenseKeyGroupsIds = []} = listItem; return ( this.deleteFeatureGroupItem(listItem)} onSelect={() => this.editFeatureGroupItem(listItem)} className='list-editor-item-view' isReadOnlyMode={isReadOnlyMode}>
{i18n('Name')}
{name}
{i18n('Entitlement')}
{i18n('Pools')}
{entitlementPoolsIds.length || 0}
{i18n('License key')}
{i18n('Groups')}
{licenseKeyGroupsIds.length || 0}
{i18n('Description')}
{description}
); } filterList() { let {featureGroupsList} = this.props; let {localFilter} = this.state; if (localFilter.trim()) { const filter = new RegExp(escape(localFilter), 'i'); return featureGroupsList.filter(({name = '', description = ''}) => { return escape(name).match(filter) || escape(description).match(filter); }); } else { return featureGroupsList; } } closeFeatureGroupsEditor() { this.props.onCancelFeatureGroupsEditor(); } editFeatureGroupItem(featureGroup) { this.props.onEditFeatureGroupClick(featureGroup); } deleteFeatureGroupItem(featureGroup) { this.props.onDeleteFeatureGroupClick(featureGroup); } } export default FeatureGroupListEditorView;