/*! * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. * * 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 i18n from 'nfvo-utils/i18n/i18n.js'; import SelectActionTable from 'nfvo-components/table/SelectActionTable.jsx'; import SelectActionTableRow from 'nfvo-components/table/SelectActionTableRow.jsx'; import SelectActionTableCell from 'nfvo-components/table/SelectActionTableCell.jsx'; import {relationTypesOptions, NEW_RULE_TEMP_ID} from './SoftwareProductDependenciesConstants.js'; const TableActionRow = ({onAction, actionIcon, showAction, dependency, sourceOptions, targetOptions, onDataChanged}) => { return ( { dependency.sourceId = newVal; onDataChanged(dependency); }} /> { dependency.targetId = newVal; onDataChanged(dependency); }} /> ); }; export default class SoftwareProductDependenciesView extends React.Component { filterTargets({componentsOptions, sourceToTargetMapping, selectedSourceId, selectedTargetId}) { let isInMap = sourceToTargetMapping.hasOwnProperty(selectedSourceId); return componentsOptions.filter(component => { if (component.value === selectedTargetId) { return true; } else { return component.value !== selectedSourceId && (isInMap ? sourceToTargetMapping[selectedSourceId].indexOf(component.value) < 0 : true); } }); } filterSources({componentsOptions, sourceToTargetMapping, selectedSourceId, selectedTargetId}) { return componentsOptions.filter(component => { if (component.value === selectedSourceId) { return true; } else { let isInMap = sourceToTargetMapping.hasOwnProperty(component.value); return component.value !== selectedTargetId && (isInMap ? sourceToTargetMapping[component.value].indexOf(selectedTargetId) < 0 : true); } }); } render() { let {componentsOptions, softwareProductDependencies, onDataChanged, onAddDependency, onDeleteDependency, isReadOnlyMode} = this.props; let sourceToTargetMapping = {}; softwareProductDependencies.map(dependency => { let isInMap = sourceToTargetMapping.hasOwnProperty(dependency.sourceId); if (dependency.targetId) { sourceToTargetMapping[dependency.sourceId] = isInMap ? [...sourceToTargetMapping[dependency.sourceId], dependency.targetId] : [dependency.targetId]; } }); let depList = softwareProductDependencies.filter(dependency => dependency.id !== NEW_RULE_TEMP_ID); let newDependency = softwareProductDependencies.find(dependency => dependency.id === NEW_RULE_TEMP_ID); return (
{i18n('Dependencies')}
{!isReadOnlyMode && onAddDependency(newDependency)} dependency={newDependency} componentsOptions={componentsOptions} sourceToTargetMapping={sourceToTargetMapping} onDataChanged={onDataChanged} sourceOptions={this.filterSources({componentsOptions, sourceToTargetMapping, selectedSourceId: newDependency.sourceId, selectedTargetId: newDependency.targetId})} targetOptions={this.filterTargets({componentsOptions, sourceToTargetMapping, selectedSourceId: newDependency.sourceId, selectedTargetId: newDependency.targetId})} showAction={newDependency.targetId !== null && newDependency.relationType !== null && newDependency.sourceId !== null}/> } {depList.map(dependency => ( onDeleteDependency(dependency)} dependency={dependency} componentsOptions={componentsOptions} sourceToTargetMapping={sourceToTargetMapping} sourceOptions={this.filterSources({componentsOptions, sourceToTargetMapping, selectedSourceId: dependency.sourceId, selectedTargetId: dependency.targetId})} targetOptions={this.filterTargets({componentsOptions, sourceToTargetMapping, selectedSourceId: dependency.sourceId, selectedTargetId: dependency.targetId})} onDataChanged={onDataChanged} showAction={true}/> ))}
); } }