import Inferno from 'inferno'; import { Component } from 'inferno'; import PropTypes from 'prop-types'; import dictionaryData from '../../managers/DictionaryData'; import { IPAField } from './IPAField'; import { LargeTextArea } from './LargeTextArea'; import { Word } from '../../managers/Word'; export class WordForm extends Component { constructor (props) { super(props); PropTypes.checkPropTypes({ word: PropTypes.object, callback: PropTypes.func, updateDisplay: PropTypes.func, }, props, 'prop', 'WordForm'); this.state = { wordName: props.word ? props.word.name : '', wordPronunciation: props.word ? props.word.pronunciation : '', wordPartOfSpeech: props.word ? props.word.partOfSpeech : '', wordDefinition: props.word ? props.word.definition : '', wordDetails: props.word ? props.word.details : '', nameIsValid: true, pronunciationIsValid: true, partOfSpeechIsValid: true, definitionIsValid: true, detailsIsValid: true, } } isValidWord () { let nameIsValid = true, definitionIsValid = true, detailsIsValid = true; if (this.state.wordName === '') { nameIsValid = false; } if (this.state.wordPartOfSpeech === '') { // popup(?) confirming no part of speech. } if (this.state.wordDefinition === '' && this.state.wordDetails === '') { definitionIsValid = false; detailsIsValid = false; } this.setState({ nameIsValid, definitionIsValid, detailsIsValid, }); return nameIsValid == true && definitionIsValid == true && detailsIsValid == true; } submitWord () { const word = new Word(Object.assign((this.props.word ? this.props.word : {}), { name: this.state.wordName, pronunciation: this.state.wordPronunciation, partOfSpeech: this.state.wordPartOfSpeech, definition: this.state.wordDefinition, details: this.state.wordDetails, })); if (this.isValidWord()) { // Need to trigger a WordsList re-render after success. let wordAction; if (this.props.word) { wordAction = word.update() .then(() => { this.props.callback(); }) } else { wordAction = word.create() .then(() => { this.clearForm(); }); } wordAction.then(() => { this.props.updateDisplay(); }) } } clearForm () { this.setState({ wordName: '', wordPronunciation: '', wordPartOfSpeech: '', wordDefinition: '', wordDetails: '', }); } render () { return (
{ this.setState({ wordName: event.target.value }); }} /> {(!this.state.nameIsValid) ? ( You must specify the word. ) : null}
this.setState({ wordPronunciation: newValue }) } />
{ this.setState({ wordDefinition: event.target.value }) }} /> {(!this.state.definitionIsValid) ? ( You must at least enter a Definition if excluding Details. ) : null}
{ this.setState({ wordDetails: event.target.value }); }} /> {this.props.word ? (
{ this.props.callback(); }}> Cancel
{ this.submitWord(); }}> Update
) : (
{ this.submitWord(); }}> Create
) }
); } }