1 import React from 'react';
2 import i18n from 'nfvo-utils/i18n/i18n.js';
3 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 SoftwareProductProcessesEditor from './SoftwareProductComponentProcessesEditor.js';
9 import SoftwareProductComponentsProcessesConfirmationModal from './SoftwareProductComponentsProcessesConfirmationModal.jsx';
11 class SoftwareProductProcessesView extends React.Component {
18 onAddProcess: React.PropTypes.func,
19 onEditProcessClick: React.PropTypes.func,
20 onDeleteProcessClick: React.PropTypes.func,
21 isDisplayModal: React.PropTypes.bool,
22 isModalInEditMode: React.PropTypes.bool,
23 onStorageSelect: React.PropTypes.func,
24 componentId: React.PropTypes.string,
25 softwareProductId: React.PropTypes.string
29 let { softwareProductId, componentId} = this.props;
32 <div className='vsp-processes-page'>
33 <div className='software-product-view'>
34 <div className='software-product-landing-view-right-side flex-column'>
36 {this.renderProcessList()}
38 <SoftwareProductComponentsProcessesConfirmationModal
39 componentId={componentId}
40 softwareProductId={softwareProductId}/>
47 let {softwareProductId, componentId, isReadOnlyMode, isDisplayModal, isModalInEditMode} = this.props;
49 <Modal show={isDisplayModal} bsSize='large' animation={true}>
51 <Modal.Title>{isModalInEditMode ? i18n('Edit Process Details') : i18n('Create New Process Details')}</Modal.Title>
53 <Modal.Body className='edit-process-modal'>
54 <SoftwareProductProcessesEditor
55 componentId={componentId}
56 softwareProductId={softwareProductId}
57 isReadOnlyMode={isReadOnlyMode}/>
65 const {localFilter} = this.state;
66 let {onAddProcess, isReadOnlyMode} = this.props;
68 <div className='processes-list'>
70 plusButtonTitle={i18n('Add Component Process Details')}
71 filterValue={localFilter}
72 placeholder={i18n('Filter Process')}
74 isReadOnlyMode={isReadOnlyMode}
75 onFilter={filter => this.setState({localFilter: filter})}>
76 {this.filterList().map(processes => this.renderProcessListItem(processes, isReadOnlyMode))}
82 renderProcessListItem(process, isReadOnlyMode) {
83 let {id, name, description, artifactName = ''} = process;
84 let {onEditProcessClick, onDeleteProcessClick} = this.props;
88 className='list-editor-item-view'
89 isReadOnlyMode={isReadOnlyMode}
90 onSelect={() => onEditProcessClick(process)}
91 onDelete={() => onDeleteProcessClick(process)}>
93 <div className='list-editor-item-view-field'>
94 <div className='title'>{i18n('Name')}</div>
95 <div className='name'>{name}</div>
97 <div className='list-editor-item-view-field'>
98 <div className='title'>{i18n('Artifact name')}</div>
99 <div className='artifact-name'>{artifactName}</div>
101 <div className='list-editor-item-view-field'>
102 <div className='title'>{i18n('Notes')}</div>
103 <div className='description'>{description}</div>
105 </ListEditorItemView>
111 let {processesList} = this.props;
112 let {localFilter} = this.state;
113 if (localFilter.trim()) {
114 const filter = new RegExp(escape(localFilter), 'i');
115 return processesList.filter(({name = '', description = ''}) => {
116 return escape(name).match(filter) || escape(description).match(filter);
120 return processesList;
125 export default SoftwareProductProcessesView;