public/js/components/FormFields/FormFieldRadioButtons.js (44 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 FormFieldRadioButtons extends React.Component {
static propTypes = {
fieldLabel: PropTypes.string,
fieldName: PropTypes.string,
selectValues: PropTypes.arrayOf(PropTypes.string),
selectLabels: PropTypes.arrayOf(PropTypes.string),
fieldValue: PropTypes.string,
fieldErrors: PropTypes.arrayOf(errorPropType),
formRowClass: PropTypes.string,
onUpdateField: PropTypes.func,
fieldCaption: PropTypes.string
};
onUpdate = (e) => {
this.props.onUpdateField(e.target.value);
};
renderButton(value, label, i) {
return (
<div key={i} className="form__group--radio">
<input className="form__radio-btn" type="radio" value={value} checked={this.props.fieldValue === value ? 'checked' : false} onChange={this.onUpdate} name={this.props.fieldName} />
<span className="form__label form__label--radio">{label}</span>
</div>
);
}
renderButtons() {
return this.props.selectValues.map(function(value, index) {
return this.renderButton(value, this.props.selectLabels ? this.props.selectLabels[index] : value, index);
}, this);
}
render() {
return (
<div className={this.props.formRowClass || "form__row"}>
{this.props.fieldLabel ?
<label htmlFor={this.props.fieldName} className="form__label">
{this.props.fieldLabel}
{this.props.fieldCaption ? <small className="form__label--caption">{this.props.fieldCaption}</small> : false}
</label>
: false}
{this.renderButtons()}
<ShowErrors errors={this.props.fieldErrors}/>
</div>
);
}
}