// Copyright 2015, 2016 Ethcore (UK) Ltd. // This file is part of Parity. // Parity 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. // Parity 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 Parity. If not, see . import React, { Component, PropTypes } from 'react'; import AutoComplete from 'material-ui/AutoComplete'; import styles from './EditableValue.css'; import valueStyles from '../Value/Value.css'; export default class EditableValue extends Component { state = { value: this.props.value, inEditMode: false } componentWillReceiveProps (newProps) { if (newProps.value === this.state.value || this.state.inEditMode) { return; } this.setState({ value: newProps.value }); } onChange = value => { this.setState({ value: value }); } onOpenEdit = evt => { this.setState({ inEditMode: true }); if (!this._input) { return; } this._input.focus(); } onCancel = evt => { this.setState({ inEditMode: false, value: this.props.value }); } onSubmit = () => { this.setState({ inEditMode: false }); this.props.onSubmit(this.state.value, false); } onResetToDefault = () => { this.props.onSubmit(this.props.defaultValue, true); } render () { return (
{ this.renderResetButton() }
{ this.props.children } { this.renderButtons() }
{ this.renderInput() }
); } renderInput () { const { inEditMode, value } = this.state; const setInput = el => { this._input = el; }; const onChange = evt => this.onChange(evt.target.value); if (!inEditMode || !this.props.autocomplete) { return ( ); } return ( ); } renderResetButton () { if (this.state.inEditMode) { return; } if (!this.props.defaultValue || this.state.value === this.props.defaultValue) { return; } return ( ); } renderButtons () { if (this.state.inEditMode) { return [ , ]; } return ( ); } static propTypes = { onSubmit: PropTypes.func.isRequired, value: PropTypes.string, defaultValue: PropTypes.string, children: PropTypes.element, autocomplete: PropTypes.bool, dataSource: PropTypes.arrayOf(PropTypes.string) } }