UNPKG

react-form-with-constraints

Version:
46 lines (45 loc) 1.92 kB
import * as React from 'react'; import { instanceOf } from 'prop-types'; import { FieldFeedbacks } from './FieldFeedbacks'; import { FormWithConstraints } from './FormWithConstraints'; export class FieldFeedbackWhenValid extends React.Component { constructor() { super(...arguments); this.state = { fieldIsValid: undefined }; this.fieldWillValidate = (fieldName) => { if (fieldName === this.context.fieldFeedbacks.fieldName) { this.setState({ fieldIsValid: undefined }); } }; this.fieldDidValidate = (field) => { if (field.name === this.context.fieldFeedbacks.fieldName) { this.setState({ fieldIsValid: field.isValid() }); } }; this.fieldDidReset = (field) => { if (field.name === this.context.fieldFeedbacks.fieldName) { this.setState({ fieldIsValid: undefined }); } }; } componentDidMount() { this.context.form.addFieldWillValidateEventListener(this.fieldWillValidate); this.context.form.addFieldDidValidateEventListener(this.fieldDidValidate); this.context.form.addFieldDidResetEventListener(this.fieldDidReset); } componentWillUnmount() { this.context.form.removeFieldWillValidateEventListener(this.fieldWillValidate); this.context.form.removeFieldDidValidateEventListener(this.fieldDidValidate); this.context.form.removeFieldDidResetEventListener(this.fieldDidReset); } render() { const { style, ...otherProps } = this.props; return this.state.fieldIsValid ? (React.createElement("span", { ...otherProps, style: { display: 'block', ...style } })) : null; } } FieldFeedbackWhenValid.contextTypes = { form: instanceOf(FormWithConstraints).isRequired, fieldFeedbacks: instanceOf(FieldFeedbacks).isRequired };