UNPKG

focus-components-v3

Version:

Focus web components to build applications (based on Material Design)

75 lines (64 loc) 2.42 kB
import React, {Component, PropTypes} from 'react'; import AutocompleteSelectEdit from './edit'; import AutocompleteSelectConsult from './consult'; import i18next from 'i18next'; class AutocompleteSelectField extends Component { constructor(props) { super(props); this.state = { customError: null }; } componentWillReceiveProps({error, valid}) { if(!valid) this.setState({customError: error}); } getValue = () => { const {editing, formattedInputValue} = this.props; if (editing) { return this.refs.autocomplete.getValue(); } else { return formattedInputValue; } }; _handleAutocompleteBadInput = formattedInputValue => { const {onBlurError} = this.props; if(onBlurError) onBlurError(i18next.t('focus.components.input.autocomplete.error.invalid', {formattedInputValue})); }; _handleAutocompleteChange = rawInputValue => { const {onChange} = this.props; if (onChange) onChange(rawInputValue); }; _renderEdit = () => { const {customError} = this.state; const {onBlurError, valid, hasResolved} = this.props; return ( <AutocompleteSelectEdit customError={customError} hasResolved={hasResolved} valid={valid} onBadInput={this._handleAutocompleteBadInput} onChange={this._handleAutocompleteChange} onBlurError={onBlurError} ref='autocomplete' {...this.props} /> ); }; _renderConsult = () => { return <AutocompleteSelectConsult {...this.props} /> }; render() { const {editing} = this.props; return editing ? this._renderEdit() : this._renderConsult(); } } AutocompleteSelectField.displayName = 'AutocompleteSelectField'; AutocompleteSelectField.propTypes = { editing: PropTypes.bool.isRequired, formattedInputValue: PropTypes.oneOfType([PropTypes.string, PropTypes.number]), keyResolver: PropTypes.func.isRequired, onChange: PropTypes.func.isRequired, querySearcher: PropTypes.func.isRequired, rawInputValue: PropTypes.oneOfType([PropTypes.string, PropTypes.number]) }; export default AutocompleteSelectField;