--- /dev/null
+
+/*
+ *
+ * Copyright 2016 RIFT.IO Inc
+ *
+ * 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 {Tab, Tabs, TabList, TabPanel} from 'react-tabs';
+ import RecordViewStore from '../recordViewer/recordViewStore.js';
+ import Button from 'widgets/button/rw.button.js';
+ import './vnfrConfigPrimitives.scss';
+ import TextInput from 'widgets/form_controls/textInput.jsx';
+ import SkyquakeComponent from 'widgets/skyquake_container/skyquakeComponent.jsx';
+
+ class VnfrConfigPrimitives extends React.Component {
+ constructor(props) {
+ super(props);
+ this.state = {
+ vnfrs: []
+ };
+ this.state.execPrimitive = {};
+ }
+
+ handleExecuteClick = (configPrimitiveIndex, vnfrIndex, e) => {
+ let execute = RecordViewStore.constructAndTriggerVnfConfigPrimitive({
+ vnfrs: this.state.vnfrs,
+ configPrimitiveIndex: configPrimitiveIndex,
+ vnfrIndex: vnfrIndex
+ });
+ if (!execute) {
+ this.props.actions.showNotification('Could not execute service config. Please review your parameters');
+ }
+ }
+
+ handleParamChange = (paramIndex, configPrimitiveIndex, vnfrIndex, e) => {
+ let vnfrs = this.state.vnfrs;
+ vnfrs[vnfrIndex]["vnf-configuration"]["service-primitive"][configPrimitiveIndex]["parameter"][paramIndex].value = e.target.value
+ this.setState({
+ vnfrs: vnfrs
+ })
+ }
+
+ componentWillReceiveProps(props) {
+ if (this.state.vnfrs.length == 0) {
+ this.setState({
+ vnfrs: props.data
+ })
+ }
+ }
+
+ constructConfigPrimitiveTabs = (tabList, tabPanels) => {
+ let mandatoryFieldValue = 'true';
+ this.state.vnfrs && this.state.vnfrs.map((vnfr, vnfrIndex) => {
+ if (vnfr['vnf-configuration'] && vnfr['vnf-configuration']['service-primitive'] && vnfr['vnf-configuration']['service-primitive'].length > 0) {
+ vnfr['vnf-configuration']['service-primitive'].map((configPrimitive, configPrimitiveIndex) => {
+ let params = [];
+ if (configPrimitive['parameter'] && configPrimitive['parameter'].length > 0) {
+ configPrimitive['parameter'].map((param, paramIndex) => {
+ let optionalField = '';
+ let displayField = '';
+ let defaultValue = param['default-value'] || '';
+ let isFieldHidden = (param['hidden'] && param['hidden'] == 'true') || false;
+ let isFieldReadOnly = (param['read-only'] && param['read-only'] == 'true') || false;
+ if (param.mandatory == mandatoryFieldValue) {
+ optionalField = <span className="required">*</span>
+ }
+ if (isFieldReadOnly) {
+ displayField = <div className='readonly'>{param.value || defaultValue}</div>
+ } else {
+ displayField = <TextInput type="text" label={param.name} required={(param.mandatory == mandatoryFieldValue)} className="" type="text" defaultValue={defaultValue} value={param.value} onChange={this.handleParamChange.bind(this, paramIndex, configPrimitiveIndex, vnfrIndex)} />
+ }
+ params.push(
+ <li key={paramIndex}>
+ {displayField}
+ </li>
+ );
+ });
+ }
+ tabList.push(
+ <Tab key={configPrimitiveIndex}>{configPrimitive.name}</Tab>
+ );
+
+ tabPanels.push(
+ <TabPanel key={configPrimitiveIndex + '-panel'}>
+ <h4>{configPrimitive.name}</h4>
+ <div className="noticeSubText noticeSubText_right">
+ * required
+ </div>
+ <div>
+ <ul className="parameterGroup">
+ {params}
+ </ul>
+ </div>
+ <button className="dark" role="button" onClick={this.handleExecuteClick.bind(this, configPrimitiveIndex, vnfrIndex)}>{configPrimitive.name}</button>
+ </TabPanel>
+ )
+ });
+ }
+ });
+ }
+
+ render() {
+
+ let tabList = [];
+ let tabPanels = [];
+ let isConfiguring = (this.props.data['config-status'] && this.props.data['config-status'] != 'configured') || false;
+ let displayConfigStatus = isConfiguring ? '(Disabled - Configuring)': '';
+
+ this.constructConfigPrimitiveTabs(tabList, tabPanels);
+
+ return (
+ <div className="nsConfigPrimitives vnfrConfigPrimitives">
+ <div className="launchpadCard_title">
+ SERVICE-PRIMITIVES {displayConfigStatus}
+ </div>
+ <div className={isConfiguring ? 'configuring': 'nsConfigPrimitiveTabs'}>
+ <Tabs onSelect={this.handleSelect}>
+ <TabList>
+ {tabList}
+ </TabList>
+ {tabPanels}
+ </Tabs>
+ </div>
+ </div>
+
+ );
+ }
+}
+export default SkyquakeComponent(VnfrConfigPrimitives);