var React = require('react'); var Formsy = require('formsy-react'); var currentYear = new Date().getFullYear(); var 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', function (values, value) { value = parseInt(value); if (typeof value !== 'number' || value !== value) { return false; } return value < currentYear && value > currentYear - 130; }); var App = React.createClass({ submit: function (data) { alert(JSON.stringify(data, null, 4)); }, render: function () { return ( ); } }); var MyOwnInput = React.createClass({ mixins: [Formsy.Mixin], changeValue: function (event) { this.setValue(event.currentTarget.value); }, render: function () { var className = this.props.className + ' ' + (this.showError() ? 'error' : null); var errorMessage = this.getErrorMessage(); return (
{errorMessage}
); } }); var DynamicInput = React.createClass({ mixins: [Formsy.Mixin], getInitialState: function() { return { validationType: 'time' }; }, changeValue: function (event) { this.setValue(event.currentTarget.value); }, changeValidation: function(validationType) { this.setState({ validationType: validationType }); this.setValue(this.getValue()); }, validate: function () { var value = this.getValue(); return value === '' ? true : validators[this.state.validationType].regexp.test(value); }, getCustomErrorMessage: function() { return this.showError() ? validators[this.state.validationType].message : ''; }, render: function () { var className = this.props.className + ' ' + (this.showError() ? 'error' : null); var errorMessage = this.getCustomErrorMessage(); return (
{errorMessage}
); } }); var Validations = React.createClass({ changeValidation: function(e) { this.props.changeValidation(e.target.value); }, render: function() { return (
Validation Type
Time
Decimal
Binary
); } }); React.render(, document.getElementById('example'));