All files / components/TextFieldValidated TextFieldValidated.jsx

77.78% Statements 7/9
100% Branches 0/0
0% Functions 0/1
77.78% Lines 7/9
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88                120x           120x               120x                                                                 120x                       7x   7x   7x                                
import _ from 'lodash';
import React from 'react';
import Validation from '../Validation/Validation';
import TextField from '../TextField/TextField';
import reducers from '../TextField/TextField.reducers';
import { lucidClassNames } from '../../util/style-helpers';
import { createClass, findTypes, omitProps }  from '../../util/component-types';
 
const cx = lucidClassNames.bind('&-TextFieldValidated');
 
const {
	any,
	object,
	string,
} = React.PropTypes;
 
/**
 *
 * {"categories": ["controls", "text"], "extend": "TextField", "madeFrom": ["TextField", "Validation"]}
 *
 * A composition of TextField and Validation.
 */
const TextFieldValidated = createClass({
	displayName: 'TextFieldValidated',
 
	reducers,
 
	components: {
		/**
		 * Content that will be displayed as an error message.
		 */
		Error: createClass({
			displayName: 'TextFieldValidated.Error',
			propName: 'Error',
		}),
	},
 
	propTypes: {
		/**
		 * Passed to the root container.
		 */
		style: object,
 
		/**
		 * Passed to the root container.
		 */
		className: string,
 
		/**
		 * Prop alternative to Error child component
		 */
		Error: any,
	},
 
	getDefaultProps() {
		return TextField.getDefaultProps();
	},
 
	focus() {
		this.refs.TextField.focus();
	},
 
	render() {
		const {
			className,
			style,
			...passThroughs,
		} = this.props;
 
		const errorChildProps = _.map(findTypes(this.props, TextFieldValidated.Error), 'props');
 
		return (
			<Validation
				className={cx('&', className)}
				style={style}
				Error={errorChildProps}
			>
				<TextField
					{...omitProps(passThroughs, TextFieldValidated)}
					ref={ref => this.refs = { TextField: ref }}
				/>
			</Validation>
		);
	},
});
 
export default TextFieldValidated;