react-form-with-constraints
Version:
Simple form validation for React
46 lines (45 loc) • 1.92 kB
JavaScript
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
};