wrap-component-with-valour
v2.0.0
Published
Wrap a component with client side validation functionality using the Valour library
Downloads
11
Readme
Wrap Component With Valour
wrapComponentWithValour
is a function that takes a React component and returns a component with added
client side validation using the valour library.
Props
Passing a component definition to wrapComponentWithValour
will provide additional props to the newly defined component function:
formName
* requiredThe name of the form that is registered with valour. If the
formName
already exists, the rules andvalueName
will be added to the current form definition within valour.valueName
* requiredThe name of the value being registered within the valour form
rules
* requiredAn object that defines the rules for a given value within a form.
shouldRenderValidationState
- Defaults to trueShould the component render validation state. This is useful for allowing parent components to control validation for each of it's child components.
onValidationStateChanged
- Defaults to noopA function that will get run after validation has been run. It takes three parameters:
valueName
,value
, andisValid
.
Usage
SimpleText.js
import React from 'react';
import wrapComponentWithValour from 'wrap-component-with-valour';
function SimpleText({
isValid = true,
shouldRenderAsInvalid = true,
valueName,
value,
labelText,
onValueUpdated
}) {
function handleTextChanged(event) {
const newText = event.target.value;
onValueUpdated(valueName, newText);
}
const labelClass = !isValid && shouldRenderAsInvalid ? 'error' : '';
return (
<label className={labelClass}>
{labelText}
<input
type="text"
onChange={handleTextChanged}
defaultValue={value}
name={valueName}
/>
</label>
);
}
export const ValidatedText = wrapComponentWithValour(SimpleText);
MyApp.js
import React from 'react';
import valour from 'valour';
import { ValidatedSimpleText } from './SimpleText';
function MyApp() {
const rules = {
firstName: valour.rules.isRequired().validatedBy(x => x.length > 3)
};
function handleValidationStateChange(valueName, value, isValid) {
console.log(`${value} is a valid value for ${valueName}? ${isValid}`);
}
return (
<ValidatedText
formName="MyForm"
valueName="firstName"
rules={rules}
labelText="First Name"
onValidationStateChanged={handleValidationStateChange}
/>
);
}