import React, { ChangeEventHandler, Component, FocusEventHandler, KeyboardEventHandler, } from 'react'; import PropTypes from 'prop-types'; import classnames from 'classnames'; interface State { text: string; } interface Props { onSave: (text: string) => void; text?: string; placeholder?: string; editing?: boolean; newTodo?: boolean; } export default class TodoTextInput extends Component { static propTypes = { onSave: PropTypes.func.isRequired, text: PropTypes.string, placeholder: PropTypes.string, editing: PropTypes.bool, newTodo: PropTypes.bool, }; static defaultProps = { text: '', placeholder: '', editing: false, newTodo: false, }; state = { text: this.props.text || '', }; handleSubmit: KeyboardEventHandler = (e) => { const text = e.currentTarget.value.trim(); if (e.which === 13) { this.props.onSave(text); if (this.props.newTodo) { this.setState({ text: '' }); } } }; handleChange: ChangeEventHandler = (e) => { this.setState({ text: e.target.value }); }; handleBlur: FocusEventHandler = (e) => { if (!this.props.newTodo) { this.props.onSave(e.target.value); } }; render() { return ( ); } }