1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | exports.Input = void 0;
|
4 | const React = require("react");
|
5 | const prop_types_1 = require("prop-types");
|
6 | const FormWithConstraints_1 = require("./FormWithConstraints");
|
7 | class 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 | }
|
77 | exports.Input = Input;
|
78 | Input.contextTypes = {
|
79 | form: (0, prop_types_1.instanceOf)(FormWithConstraints_1.FormWithConstraints).isRequired
|
80 | };
|
81 | Input.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 | };
|