Skip to content

Commit e3cb50c

Browse files
m.volkovm.volkov
authored andcommitted
Added validatorListener for fields.
1 parent 3b7e684 commit e3cb50c

9 files changed

+20
-10
lines changed

Readme.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,7 @@ export default CheckboxValidatorElement;
230230
| validators | false | array | | Array of validators. See list of default validators above. |
231231
| errorMessages | false | array | | Array of error messages. Order of messages should be the same as `validators` prop. |
232232
| name | true | string | | Name of input |
233+
| validatorListener | false | function | | It triggers after each validation. It will return `true` or `false` |
233234
234235
235236
### Contributing

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "react-material-ui-form-validator",
3-
"version": "0.4.0",
3+
"version": "0.5.0",
44
"description": "Simple validator for forms designed with material-ui components.",
55
"main": "./lib/index.js",
66
"scripts": {

src/AutoCompleteValidator.jsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ export default class AutoCompleteValidator extends ValidatorComponent {
88

99
render() {
1010
// eslint-disable-next-line
11-
const { errorMessages, validators, requiredError, errorText, ...rest } = this.props;
11+
const { errorMessages, validators, requiredError, errorText, validatorListener, ...rest } = this.props;
1212
const { isValid } = this.state;
1313
return (
1414
<AutoComplete

src/DateValidator.jsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ export default class DateValidator extends ValidatorComponent {
88

99
render() {
1010
// eslint-disable-next-line
11-
const { errorMessages, validators, requiredError, errorText, ...rest } = this.props;
11+
const { errorMessages, validators, requiredError, errorText, validatorListener, ...rest } = this.props;
1212
const { isValid } = this.state;
1313
return (
1414
<DatePicker

src/SelectValidator.jsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ export default class SelectValidator extends ValidatorComponent {
88

99
render() {
1010
// eslint-disable-next-line
11-
const { errorMessages, validators, requiredError, errorText, ...rest } = this.props;
11+
const { errorMessages, validators, requiredError, errorText, validatorListener, ...rest } = this.props;
1212
const { isValid } = this.state;
1313
return (
1414
<SelectField

src/TextValidator.jsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ export default class TextValidator extends ValidatorComponent {
88

99
render() {
1010
// eslint-disable-next-line
11-
const { errorMessages, validators, requiredError, errorText, ...rest } = this.props;
11+
const { errorMessages, validators, requiredError, errorText, validatorListener, ...rest } = this.props;
1212
const { isValid } = this.state;
1313
return (
1414
<TextField

src/TimeValidator.jsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ export default class TimeValidator extends ValidatorComponent {
88

99
render() {
1010
// eslint-disable-next-line
11-
const { errorMessages, validators, requiredError, errorText, ...rest } = this.props;
11+
const { errorMessages, validators, requiredError, errorText, validatorListener, ...rest } = this.props;
1212
const { isValid } = this.state;
1313
return (
1414
<TimePicker

src/ValidatorComponent.jsx

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,14 +31,19 @@ class ValidatorComponent extends React.Component {
3131
}
3232

3333
componentWillReceiveProps(nextProps) {
34-
if (this.instantValidate) {
34+
if (this.instantValidate && nextProps.value !== this.props.value) {
3535
this.validate(nextProps.value);
3636
}
37-
if (nextProps.validators && nextProps.errorMessages) {
37+
if (nextProps.validators && nextProps.errorMessages &&
38+
(this.props.validators !== nextProps.validators || this.props.errorMessages !== nextProps.errorMessages)) {
3839
this.setState({ validators: nextProps.validators, errorMessages: nextProps.errorMessages });
3940
}
4041
}
4142

43+
shouldComponentUpdate(nextProps, nextState) {
44+
return this.state !== nextState || this.props !== nextProps;
45+
}
46+
4247
componentWillUnmount() {
4348
this.context.form.detachFromForm(this);
4449
}
@@ -85,7 +90,9 @@ class ValidatorComponent extends React.Component {
8590
}),
8691
);
8792

88-
this.setState({ isValid: valid });
93+
this.setState({ isValid: valid }, () => {
94+
this.props.validatorListener(this.state.isValid);
95+
});
8996
}
9097

9198

@@ -110,11 +117,13 @@ ValidatorComponent.propTypes = {
110117
validators: PropTypes.array,
111118
name: PropTypes.string,
112119
value: PropTypes.any,
120+
validatorListener: PropTypes.func,
113121
};
114122

115123
ValidatorComponent.defaultProps = {
116124
errorMessages: 'error',
117125
validators: [],
126+
validatorListener: () => {},
118127
};
119128

120129
export default ValidatorComponent;

src/ValidatorForm.jsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ class ValidatorForm extends React.Component {
136136

137137
render() {
138138
// eslint-disable-next-line
139-
const { onSubmit, instantValidate, ...rest } = this.props;
139+
const { onSubmit, instantValidate, onError, ...rest } = this.props;
140140
return (
141141
<form {...rest} onSubmit={this.submit}>
142142
{this.props.children}

0 commit comments

Comments
 (0)