Skip to content

SUI-Components/formbuilder-workbench

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

28 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Install form builder Build Status

Installation

$ npm install @s-ui/react-form-builder --save

Usage

import FormBuilder from '@s-ui/react-form-builder'

return (<FormBuilder
    json={json}
    onChange={fields => console.table(fields)}
    onBlur={onBlur}
    errors={errors}
/>)

Form Builder API

  • json: json that will build the form.
  • onChange: method triggered on each change:
    • First argument: Dictionary like {fieldId1: value1, fieldId2: value2, ... , __FIELD_CHANGED__: fieldId}. FIELD_CHANGED key contains as value the last field that has changed its value.
  • onBlur: method triggered on each on blur:
    • First argument: fieldId that has triggered the blur event.
  • errors: Dictionary like {fieldId1: [error11, error12, ...], fieldId2: [error21, error22, ...]}.

Example Form Builder with validation

  • It allows two types of validations;
    • checkConstrainstsFactory is a function exported by the form builder that returns the native errors of the form based on the constraints defined in each field in the json.
    • checkCustomConstraints is a invented function that allows to extend the validation of the form builder adding some validation outside the form.
import FormBuilder, {checkConstrainstsFactory} from '@s-ui/react-form-builder'

const onBlur = fieldId => {

    const checkCustomConstraints = ({fieldId, fieldValue}) => {
        if(fieldValue === 'prohibit_word') 
            return {[fieldId]: ['No puede contener palabras prohibidas']}
    }

    setErrors(prevErrors => {
        // get errors derived from the constraints defined in json
        const newNativeErrors = checkConstrainstsFactory(JSONBuilder)({
            for: fieldId
        })
        // get errors not defined in the json ('custom')
        const newCustomErrors = checkCustomConstraints({
            fieldId,
            fieldValue: adFields[fieldId]
        })

        const errors = {
            ...prevErrors,
            ...newNativeErrors,
            ...newCustomErrors
        }

        // set errors
        return errors
    })
}

return (<FormBuilder
    json={json}
    onBlur={onBlur}
    errors={errors}
/>)