UNPKG

3.12 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3exports.Input = void 0;
4const React = require("react");
5const prop_types_1 = require("prop-types");
6const FormWithConstraints_1 = require("./FormWithConstraints");
7class Input extends React.Component {
8 constructor() {
9 super(...arguments);
10 this.state = {
11 field: undefined
12 };
13 this.fieldWillValidate = (fieldName) => {
14 if (fieldName === this.props.name) {
15 this.setState({ field: 'pending' });
16 }
17 };
18 this.fieldDidValidate = (field) => {
19 if (field.name === this.props.name) {
20 this.setState({ field });
21 }
22 };
23 this.fieldDidReset = (field) => {
24 if (field.name === this.props.name) {
25 this.setState({ field: undefined });
26 }
27 };
28 }
29 componentDidMount() {
30 this.context.form.addFieldWillValidateEventListener(this.fieldWillValidate);
31 this.context.form.addFieldDidValidateEventListener(this.fieldDidValidate);
32 this.context.form.addFieldDidResetEventListener(this.fieldDidReset);
33 }
34 componentWillUnmount() {
35 this.context.form.removeFieldWillValidateEventListener(this.fieldWillValidate);
36 this.context.form.removeFieldDidValidateEventListener(this.fieldDidValidate);
37 this.context.form.removeFieldDidResetEventListener(this.fieldDidReset);
38 }
39 fieldValidationStates() {
40 const { field } = this.state;
41 const states = [];
42 if (field !== undefined) {
43 if (field === 'pending') {
44 states.push('isPending');
45 }
46 else {
47 if (field.hasErrors())
48 states.push('hasErrors');
49 if (field.hasWarnings())
50 states.push('hasWarnings');
51 if (field.hasInfos())
52 states.push('hasInfos');
53 if (field.isValid())
54 states.push('isValid');
55 }
56 }
57 return states;
58 }
59 render() {
60 const { innerRef, className, classes, ...inputProps } = this.props;
61 const validationStates = this.fieldValidationStates();
62 let classNames = className;
63 validationStates.forEach(validationState => {
64 const tmp = classes[validationState];
65 if (tmp !== undefined) {
66 if (classNames !== undefined) {
67 classNames += ` ${tmp}`;
68 }
69 else {
70 classNames = tmp;
71 }
72 }
73 });
74 return React.createElement("input", { ref: innerRef, ...inputProps, className: classNames });
75 }
76}
77exports.Input = Input;
78Input.contextTypes = {
79 form: (0, prop_types_1.instanceOf)(FormWithConstraints_1.FormWithConstraints).isRequired
80};
81Input.defaultProps = {
82 classes: {
83 isPending: 'is-pending',
84 hasErrors: 'has-errors',
85 hasWarnings: 'has-warnings',
86 hasInfos: 'has-infos',
87 isValid: 'is-valid'
88 }
89};