@vtaits/form-schema v2.3.0-alpha.0
@vtaits/form-schema
A set of utilities for easy work with form values and errors:
- Serialize form values before submit by schema
- Parse initial values of form by schema
- Map submission errors by schema
Installation
yarn add @vtaits/form-schemaor
npm install @vtaits/form-schema --saveConcept
There are next entities:
names- array of field names, required for serialization and parsing of initial values;getFieldSchema- function that returns full schema of field by name (it can contain placeholder for input, options for select, label, help text etc.);getFieldType- function that returns type declaration of field by full schema.
Type declaration
Type declaration is an object with next params:
serializer- function for serialize form values before submit. E.g. local value of select can be object{ value, label }, but onlyvalueshould be submitted. Receives next arguments:values- all values of form;name- name of current field;fieldSchema- full schema of field;getFieldSchema- see above;getFieldType- see above;parents- stack of parent fields above current field with runtime values.
Should return OBJECT of values. By default returns
{ [name]: values[name], }parser- function for parse initial values of form before initialize. Receives next arguments:values- all values of form;name- name of current field;fieldSchema- full schema of field;getFieldSchema- see above;getFieldType- see above;parents- stack of parent fields above current field with raw values.
Should return OBJECT of values or
Promisewith object of values (can beasync). By default returns{ [name]: values[name], }validatorBeforeSubmit- function for collect validation errors of form before submit. Receives next arguments:values- all values of form;name- name of current field;fieldSchema- full schema of field;getFieldSchema- see above;getFieldType- see above;parents- stack of parent fields above current field with runtime values.
Should return OBJECT of values. By default returns empty object. Example:
{ validateBeforeSubmit: (values, name, { required }) => { if (required && !values[name]) { return { [name]: 'This field is required', }; } return {}; }, }errorsMapper- function for map errors of field from backend format to format of field. Receives next arguments:errors- intermediate result (default errors of form and collected erros of other fields);name- name of current field;fieldSchema- full schema of field;getFieldSchema- see above;getFieldType- see above;values- serialized values of form usingserializerfunctions of field;rawValues- all values of form without processing;parents- stack of parent fields above current field with runtime values.
Should return OBJECT of values. By default returns
{ [name]: errors[name], }createGetFieldSchema- function for creategetFieldSchemafor nested fields. Can be helpful for arrays of repeating fields etc. Arguments:fieldSchema- schema of current field;getFieldSchema- defaultgetFieldSchema;getFieldType- see above;values- current values (values of form during render and serialization or raw values during parsing);phase- one of next values:'parse','serialize','render';parents- stack of parent fields above current field, raw values for phase 'parse' and runtime values otherwise.
Usage
Serialization
import { serialize } from '@vtaits/form-schema';
...
serialize(values, names, getFieldSchema, getFieldType);Parsing
import { parse } from '@vtaits/form-schema';
...
parse(values, names, getFieldSchema, getFieldType);Validation before submit
import { validateBeforeSubmit } from '@vtaits/form-schema';
...
validateBeforeSubmit(values, names, getFieldSchema, getFieldType);Mapping of errors of fields
import { mapFieldErrors } from '@vtaits/form-schema';
...
mapFieldErrors(errors, names, getFieldSchema, getFieldType, values, rawValues);values- serialied values of form (result ofserialize);rawValues- raw values of form (beforeserialize).
9 months ago
9 months ago
9 months ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
3 years ago
4 years ago
4 years ago
4 years ago
4 years ago
5 years ago
5 years ago
5 years ago
6 years ago
6 years ago