wrap-component-with-valour

2.0.0 • Public • Published

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 * required

    The name of the form that is registered with valour. If the formName already exists, the rules and valueName will be added to the current form definition within valour.

  • valueName * required

    The name of the value being registered within the valour form

  • rules * required

    An object that defines the rules for a given value within a form.

  • shouldRenderValidationState - Defaults to true

    Should 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 noop

    A function that will get run after validation has been run. It takes three parameters: valueName, value, and isValid.

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}
    />
  );
}

Readme

Keywords

Package Sidebar

Install

npm i wrap-component-with-valour

Weekly Downloads

1

Version

2.0.0

License

MIT

Last publish

Collaborators

  • jacobrios