import React from 'react'; import ReactDOM from 'react-dom'; import Formsy from 'formsy-react'; import MyInput from './../components/Input'; const currentYear = new Date().getFullYear(); const validators = { time: { regexp: /^(([0-1]?[0-9])|([2][0-3])):([0-5]?[0-9])(:([0-5]?[0-9]))?$/, message: 'Not valid time' }, decimal: { regexp: /(^\d*\.?\d*[0-9]+\d*$)|(^[0-9]+\d*\.\d*$)/, message: 'Please type decimal value' }, binary: { regexp: /^([0-1])*$/, message: '10101000' } }; Formsy.addValidationRule('isYearOfBirth', (values, value) => { value = parseInt(value); if (typeof value !== 'number') { return false; } return value < currentYear && value > currentYear - 130; }); const App = React.createClass({ submit(data) { alert(JSON.stringify(data, null, 4)); }, render() { return ( ); } }); const DynamicInput = React.createClass({ mixins: [Formsy.Mixin], getInitialState() { return { validationType: 'time' }; }, changeValue(event) { this.setValue(event.currentTarget.value); }, changeValidation(validationType) { this.setState({ validationType: validationType }); this.setValue(this.getValue()); }, validate() { const value = this.getValue(); console.log(value, this.state.validationType); return value ? validators[this.state.validationType].regexp.test(value) : true; }, getCustomErrorMessage() { return this.showError() ? validators[this.state.validationType].message : ''; }, render() { const className = 'form-group' + (this.props.className || ' ') + (this.showRequired() ? 'required' : this.showError() ? 'error' : null); const errorMessage = this.getCustomErrorMessage(); return (
{errorMessage}
); } }); const Validations = React.createClass({ changeValidation(e) { this.props.changeValidation(e.target.value); }, render() { const { validationType } = this.props; return (
Validation Type
Time
Decimal
Binary
); } }); ReactDOM.render(, document.getElementById('example'));