import React from 'react'; import i18n from 'nfvo-utils/i18n/i18n.js'; import ListEditorView from 'nfvo-components/listEditor/ListEditorView.jsx'; import ListEditorItemView from 'nfvo-components/listEditor/ListEditorItemView.jsx'; const ComponentPropType = React.PropTypes.shape({ id: React.PropTypes.string, name: React.PropTypes.string, displayName: React.PropTypes.string, description: React.PropTypes.string }); class SoftwareProductComponentsListView extends React.Component { state = { localFilter: '' }; static propTypes = { isReadOnlyMode: React.PropTypes.bool, componentsList: React.PropTypes.arrayOf(ComponentPropType), onComponentSelect: React.PropTypes.func }; render() { let {componentsList = []} = this.props; return (
{ componentsList.length > 0 && this.renderComponents() }
); } renderComponents() { const {localFilter} = this.state; let {isReadOnlyMode} = this.props; return ( this.setState({localFilter: filter})} isReadOnlyMode={isReadOnlyMode}> {this.filterList().map(component => this.renderComponentsListItem(component))} ); } renderComponentsListItem(component) { let {id: componentId, name, displayName, description = ''} = component; let {currentSoftwareProduct: {id}, onComponentSelect} = this.props; return ( onComponentSelect({id, componentId})}>
{i18n('Component')}
{displayName}
{i18n('Description')}
{description}
); } filterList() { let {componentsList = []} = this.props; let {localFilter} = this.state; if (localFilter.trim()) { const filter = new RegExp(escape(localFilter), 'i'); return componentsList.filter(({displayName = '', description = ''}) => { return escape(displayName).match(filter) || escape(description).match(filter); }); } else { return componentsList; } } } export default SoftwareProductComponentsListView;