public/js/components/FormFields/FormFieldNumericInput.js (33 lines of code) (raw):
import React from 'react';
import {PropTypes} from 'prop-types';
import ShowErrors from '../Utilities/ShowErrors';
import { errorPropType } from '../../constants/errorPropType';
export default class FormFieldNumericInput extends React.Component {
static propTypes = {
fieldLabel: PropTypes.string,
fieldName: PropTypes.string,
fieldValue: PropTypes.number,
fieldPlaceholder: PropTypes.string,
fieldErrors: PropTypes.arrayOf(errorPropType),
formRowClass: PropTypes.string,
onUpdateField: PropTypes.func
};
onUpdate = (e) => {
const value = e.target.value;
const parsedValue = parseFloat(value);
if (parsedValue) {
this.props.onUpdateField(parsedValue);
} else if (value === "") {
this.props.onUpdateField(undefined);
}
};
render() {
return (
<div className={this.props.formRowClass || "form__row"}>
{this.props.fieldLabel ? <label htmlFor={this.props.fieldName} className="form__label">{this.props.fieldLabel}</label> : false}
<input type="number" className="form__field" id={this.props.fieldName} placeholder={this.props.fieldPlaceholder || ''} value={this.props.fieldValue || ''} onChange={this.onUpdate}/>
<ShowErrors errors={this.props.fieldErrors}/>
</div>
);
}
}