/** * * 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 from 'react'; import PropTypes from 'prop-types'; import { FormGroup, FormControl, FormLabel, FormText } from 'react-bootstrap'; import validator from 'validator'; import Table from '../common/table'; import TableColumn from '../common/table-column'; class EditSignalMapping extends React.Component { constructor(props) { super(props); var length = props.length; if (length === undefined) length = 1; this.state = { length: length, signals: props.signals }; } static getDerivedStateFromProps(props, state){ if (props.length === state.length && props.signals === state.signals) { return null } return{ length: props.length, signals: props.signals }; } validateLength(){ const valid = validator.isInt(this.state.length + '', { min: 1, max: 100 }); return valid ? 'success' : 'error'; } handleLengthChange = event => { const length = event.target.value; // update signals to represent length const signals = this.state.signals; if (this.state.length < length) { while (signals.length < length) { signals.push({ name: 'Signal', type: 'Type' }); } } else { signals.splice(length, signals.length - length); } // save updated state this.setState({ length, signals }); if (this.props.onChange != null) { this.props.onChange(length, signals); } } handleMappingChange = (event, row, column) => { const signals = this.state.signals; const length = this.state.length; if (column === 1) { signals[row].name = event.target.value; } else if (column === 2) { signals[row].type = event.target.value; } this.setState({ length, signals }); if (this.props.onChange != null) { this.props.onChange(this.state.length, signals); } } render() { return
{this.props.name} Length {this.props.name} Mapping Click name or type cell to edit
; } } EditSignalMapping.propTypes = { name: PropTypes.string, length: PropTypes.number, signals: PropTypes.arrayOf( PropTypes.shape({ name: PropTypes.string.isRequired, type: PropTypes.string.isRequired }) ), onChange: PropTypes.func }; export default EditSignalMapping;