UNPKG

@momentum-ui/react

Version:

Cisco Momentum UI framework for ReactJs applications

94 lines (84 loc) 2.2 kB
import React from 'react'; import { Input } from '@momentum-ui/react'; export default class InputValidation extends React.PureComponent { state = { testMe: '', testMeError: [] } handleChange = e => { this.setState({ testMe: e.target.value }); } handleSubmit = event => { event && event.preventDefault(); this.validateField('testMe', this.state.testMe); } addElement = (array, element) => { return array.includes(element) ? [...array] : [...array, element]; } removeElement = (array, element) => { return array.filter((ele) => ele !== element); } createErrorArr = (validationArr, value) => { return validationArr.reduce((agg, e) => value.match(e.test) ? this.removeElement(agg, e) : this.addElement(agg, e) , []); } validateField = (fieldName, value, cb) => { const rules = { testMe: { validation: [ { message: 'Preferred if TestMe Field is 8 characters', test: '^[a-zA-Z]{8,}$', type: 'warning' }, { message: 'TestMe Field is too short', test: '^[a-zA-Z]{6,}$', type: 'error' }, { message: 'TestMe Field must contain Caps', test: '[A-Z]', type: 'error' }, { message: 'Preferred if TestMe Field has 2 caps', test: '[A-Z]{2}', type: 'warning' } ], errors: this.state.testMeError } }; return ( this.setState({ [`${fieldName}Error`]: this.createErrorArr(rules[fieldName].validation, value) }, cb ) ); } render() { return ( <form name='testFrom' onSubmit={this.handleSubmit}> <Input name='inputValidation' label='Advanced Validation' htmlId='inputValidation' containerSize='medium-6' helpText='Field Must contain at least 6 characters and 1 capital letter' messageArr={this.state.testMeError} onChange={this.handleChange} value={this.state.testMe} /> </form> ); } }