/* * Copyright 2017 Huawei Technologies Co., Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import React from 'react'; import GridSection from 'nfvo-components/grid/GridSection.jsx'; import GridItem from 'nfvo-components/grid/GridItem.jsx'; import ListEditorView from 'nfvo-components/listEditor/ListEditorView.jsx'; import i18n from 'nfvo-utils/i18n/i18n.js'; import SVGIcon from 'sdc-ui/lib/react/SVGIcon.js'; import Button from 'sdc-ui/lib/react/Button.js'; import VNFImportActionHelper from '../vnfMarketPlace/VNFImportActionHelper.js'; function VNFAction({ action, isHeader, downloadCSAR, id, currSoftwareProduct }) { if (isHeader) { return {action}; } return ( { downloadCSAR(id, currSoftwareProduct); }} /> ); } function VNFSortableCellHeader({ isHeader, data, isDes, onSort, activeSortColumn }) { //TODO check icon sdc-ui if (isHeader) { if (activeSortColumn === data) { return ( { onSort(activeSortColumn); }}> {data} ); } else { return ( { activeSortColumn = data; onSort(activeSortColumn); }}> {data} ); } } return ( {data} ); } export function VNFItemList({ vnf, isHeader, isDes, onSort, activeSortColumn, downloadCSAR, selectTableRow, selectedRow, currentSoftwareProduct }) { let { csarId, name, version, provider, shortDesc, action } = vnf; return (
  • { selectTableRow(csarId); }}>
    { onSort('name', activeSort); }} activeSortColumn={activeSortColumn} />
    { onSort('version', activeSort); }} activeSortColumn={activeSortColumn} />
    { onSort('provider', activeSort); }} activeSortColumn={activeSortColumn} />
    { onSort('shortDesc', activeSort); }} activeSortColumn={activeSortColumn} />
  • ); } class VNFImportView extends React.Component { state = { localFilter: '', sortDescending: true, sortCrit: 'name', activeSortColumn: 'Name', selectedRow: '' }; render() { let { onCancel, onSubmit, currentSoftwareProduct } = this.props; return (
    this.setState({ localFilter: filter }) }> this.setState({ sortDescending: !this.state .sortDescending, sortCrit: sortCriteria, activeSortColumn: activeSortCol }) } activeSortColumn={this.state.activeSortColumn} /> {this.sortVNFItems( this.filterVNFItems(), this.state.sortDescending, this.state.sortCrit ).map(vnf => ( { this.setState({ selectedRow: selID }); this.selectTableRow(selID); }} selectedRow={this.state.selectedRow} currentSoftwareProduct={ currentSoftwareProduct } /> ))}
    ); } filterVNFItems() { let { vnfItems } = this.props; let { localFilter } = this.state; if (localFilter.trim()) { const filter = new RegExp(escape(localFilter), 'i'); return vnfItems.filter( ({ name = '', provider = '', version = '', shortDesc = '' }) => escape(name).match(filter) || escape(provider).match(filter) || escape(version).match(filter) || escape(shortDesc).match(filter) ); } else { return vnfItems; } } sortVNFItems(vnfItems, sortDesc, sortCrit) { if (sortDesc) { return vnfItems.sort((a, b) => { if (a[sortCrit] < b[sortCrit]) { return -1; } else if (a[sortCrit] > b[sortCrit]) { return 1; } else { return 0; } }); } else { return vnfItems.reverse(); } } downloadCSAR(id, currSoftwareProduct) { VNFImportActionHelper.download(id, currSoftwareProduct); } } export default VNFImportView;