import Formsy, { addValidationRule, propTypes, withFormsy } from 'formsy-react';
import PropTypes from 'prop-types';
import React from 'react';
import ReactDOM from 'react-dom';
import MyInput from './../components/Input';
const currentYear = new Date().getFullYear();
addValidationRule('time', (values, value) => {
return /^(([0-1]?[0-9])|([2][0-3])):([0-5]?[0-9])(:([0-5]?[0-9]))?$/.test(value);
});
addValidationRule('decimal', (values, value) => {
return /(^\d*\.?\d*[0-9]+\d*$)|(^[0-9]+\d*\.\d*$)/.test(value);
});
addValidationRule('binary', (values, value) => {
return /^([0-1])*$/.test(value);
});
addValidationRule('isYearOfBirth', (values, value) => {
const parsedValue = parseInt(value, 10);
if (typeof parsedValue !== 'number') {
return false;
}
return parsedValue < currentYear && parsedValue > currentYear - 130;
});
class App extends React.Component {
constructor(props) {
super(props);
this.submit = this.submit.bind(this);
}
submit(data) {
alert(JSON.stringify(data, null, 4));
}
render() {
return (
);
}
}
class DynamicInput extends React.Component {
constructor(props) {
super(props);
this.state = { validationType: 'time' };
this.changeValidation = this.changeValidation.bind(this);
this.changeValue = this.changeValue.bind(this);
}
changeValidation(validationType) {
this.setState({ validationType: validationType });
this.props.setValue(this.props.getValue());
}
changeValue(event) {
this.props.setValue(event.currentTarget.value);
}
render() {
const errorMessage = {
time: 'Not a valid time format',
decimal: "Not a valid decimal value",
binary: "Not a valid binary number"
}
return (
);
}
}
DynamicInput.displayName = "dynamic input";
DynamicInput.propTypes = {
...propTypes,
};
const FormsyDynamicInput = withFormsy(DynamicInput);
class Validations extends React.Component {
constructor(props) {
super(props);
this.changeValidation = this.changeValidation.bind(this);
}
changeValidation(e) {
this.props.changeValidation(e.target.value);
}
render() {
const { validationType } = this.props;
return (
);
}
}
Validations.propTypes = {
changeValidation: PropTypes.func.isRequired,
validationType: PropTypes.string.isRequired,
};
ReactDOM.render(, document.getElementById('example'));