import React from 'react';
import PropTypes from 'prop-types';
/* !- Contexts */
import { bindFormContexts } from '../context';
/* !- React Elements */
import Field from '../formField';
/**
* Input Component
*
* @extends Field
*/
class Input extends Field
{
/**
* @private
* @override
* @emits
* @param {SytheticEvent} event
* @return {void}
*/
onChangeInputHandler = (event) =>
{
this.onChangeHandler(event.target.value, event);
}
/* !- Renders */
/**
* This method is called when render the Component instance.
* @override
* @return {ReactElement}
*/
render()
{
const { intl, multipleData, complete, preload } = this.props;
const multipleDataText = () => intl ? intl.formatMessage({ id: multipleData }) : multipleData;
return super.render() || (
{ this.label }
{ this.state.prefix &&
{this.state.prefix}
}
{
this.element = ref;
}}
data-name={this.props.name}
/>
{ this.state.postfix &&
{this.state.postfix}
}
{ this.state.error &&
{this.state.error}
}
);
}
}
/**
* propTypes
* @override
* @type {Object}
*/
Input.propTypes =
{
...Input.propTypes,
/**
* Specifies the type of input to display such as "password" or "email".
*/
type: PropTypes.oneOf(['text', 'password', 'email', 'date', 'tel', 'number', 'datetime-local']),
/**
* Regular expression to input validator
*/
regexp: PropTypes.string,
/**
* Override the inline-styles of the TextField's underline element.
*/
underlineStyle: PropTypes.objectOf(PropTypes.string),
prefix: PropTypes.oneOfType([
PropTypes.element,
PropTypes.string,
]),
postfix: PropTypes.oneOfType([
PropTypes.element,
PropTypes.string,
]),
/**
* Special placeholder, when state.value type is array
*/
multipleData: PropTypes.string,
};
/**
* defaultProps
* @override
* @type {Object}
*/
Input.defaultProps =
{
...Input.defaultProps,
type: 'text',
underlineStyle: {},
regexp: '',
prefix: '',
postfix: '',
};
export default bindFormContexts(Input);