/** * File: edit-widget-signals-control.js * Author: Ricardo Hernandez-Montoya * Date: 03.04.2017 * * This file is part of VILLASweb. * * VILLASweb is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * VILLASweb is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with VILLASweb. If not, see . **********************************************************************************/ import React, { Component } from 'react'; import { FormGroup, Checkbox, ControlLabel, FormControl } from 'react-bootstrap'; class EditWidgetSignalsControl extends Component { constructor(props) { super(props); this.state = { widget: { simulator: {} } }; } componentWillReceiveProps(nextProps) { // Update state's widget with props this.setState({ widget: nextProps.widget }); } handleSignalChange(checked, index) { var signals = this.state.widget[this.props.controlId]; var new_signals; if (checked) { // add signal new_signals = signals.concat(index); } else { // remove signal new_signals = signals.filter( (idx) => idx !== index ); } this.props.handleChange({ target: { id: this.props.controlId, value: new_signals } }); } render() { let signalsToRender = []; if (this.props.simulation) { // get selected simulation model const simulationModel = this.props.simulation.models.find( model => model.simulator.node === this.state.widget.simulator.node && model.simulator.simulator === this.state.widget.simulator.simulator ); // If simulation model update the signals to render signalsToRender = simulationModel? simulationModel.outputMapping : []; } return ( Signals { signalsToRender.length === 0 || !this.state.widget.hasOwnProperty(this.props.controlId)? ( No signals available. ) : ( signalsToRender.map((signal, index) => ( this.handleSignalChange(e.target.checked, index)}>{signal.name} )) ) } ); } } export default EditWidgetSignalsControl;