fleet/frontend/components/forms/fields/InputFieldWithIcon/InputFieldWithIcon.jsx
Mike Stone 01e7ac2b6c Create query (#382)
* API call to create queries

* Add queries to redux

* create query when query form is submitted

* Redirect to ShowQueryPage after creating query

* Removes theme dropdown and NewQuery component header

* Extract NewQueryPage component state to redux state

* Pass logic down to NewQuery component as props

* Changes NewQuery component name to QueryComposer

* Render NewQueryPage for /queries/:id route

* Update ReduxConfig for loading a single resource

* QueryPage tests

* Get query when the query page loads

* catch errors when query is invalid

* Renames UpdateQueryForm to QueryForm to re-usability

* Changes InputField to a controlled component

* Always render the Query Form on Query Pages
2016-11-07 11:42:39 -05:00

70 lines
1.7 KiB
JavaScript

import React, { PropTypes } from 'react';
import classnames from 'classnames';
import InputField from '../InputField';
const baseClass = 'input-icon-field';
class InputFieldWithIcon extends InputField {
static propTypes = {
autofocus: PropTypes.bool,
error: PropTypes.string,
iconName: PropTypes.string,
name: PropTypes.string,
onChange: PropTypes.func,
placeholder: PropTypes.string,
type: PropTypes.string,
};
renderHeading = () => {
const { error, placeholder, value } = this.props;
const labelClasses = classnames(
`${baseClass}__label`,
{ [`${baseClass}__label--hidden`]: !value }
);
if (error) {
return <div className={`${baseClass}__errors`}>{error}</div>;
}
return <div className={labelClasses}>{placeholder}</div>;
}
render () {
const { error, iconName, name, placeholder, type, value } = this.props;
const { onInputChange } = this;
const inputClasses = classnames(
`${baseClass}__input`,
'input-with-icon',
{ [`${baseClass}__input--error`]: error },
{ [`${baseClass}__input--password`]: type === 'password' }
);
const iconClasses = classnames(
`${baseClass}__icon`,
iconName,
{ [`${baseClass}__icon--error`]: error },
{ [`${baseClass}__icon--active`]: value }
);
return (
<div className={baseClass}>
{this.renderHeading()}
<input
name={name}
onChange={onInputChange}
className={inputClasses}
placeholder={placeholder}
ref={(r) => { this.input = r; }}
type={type}
value={value}
/>
{iconName && <i className={iconClasses} />}
</div>
);
}
}
export default InputFieldWithIcon;