LetsForm API Reference
The <LetsForm />
components accepts the following parameters (all frameworks):
Field | Type | Description |
---|---|---|
className | string | Class name for the LetsFrom main container |
custom | React view | Custom React view shown next to the form buttons |
context | object | Variables to store in the form context and availabe in scrips |
defaultValues | object | Initial values of the form |
disabled | boolean | If true, disable the entire form. Default is false |
disableButtons | boolean | Disable submit and cancel buttons |
disableOnSubmit | boolean | Disable the form on submit (if connectors are specified) |
form | LetsForm JSON Schema | The JSON definition of the form |
footer | React view | Custom React view shown at the end of the form, just above submit button |
hideCancel | boolean | Hide cancel button |
hideSubmit | boolean | Hide submit button |
loader | ReactNode | React component to show while loading external components |
locale | string | Locale for the form (i.e., it-IT, en-US, etc. or auto for auto detect). Default: auto |
onChange | function | Called when form data changes, argument is an object with the form values |
onError | function | Called when user clicks on “submit” button with validation errors, argument is an object of validation errors |
onEnter | function | Called when user hits “Enter” on any text field |
onSubmit | function | Called when user clicks on “submit” button and there are no validation error, argument is an object with the form values |
onSubmitSuccess | function | Called after the form was succesfully submitted (if connectors are specified). The argument it’s generally the response object of the fetch call, it’s an array in case of multiple connectors |
onSubmitError | function | Called if a connector defined in the form fails with an excpetion or a 4xx / 5xx response. The argument is the error object or the response object from the fetch call |
onJavascriptError | function | Called when JavaScript code embedded in the form (a Transformer of validator), raises an error. Argument is an object describing the error |
plaintext | boolean | Show the plaintext version of the form. Default is false |
prealoadComponents | boolean | Preaload all external components before showing the form. Default: true |
readOnly | boolean | Put the fields of the form in read only mode. Default is false |
resetAfterSubmit | boolean | Reset form on a succesfully submit (if connectors are specified) |
For example:
import LetsForm from 'lets-form/react-rsuite5';
<LetsForm
defaultValues={myDefaultValues}
locale="en-US"
form={myFormSchema}
onChange={values => {
setState(values);
}}
onSubmit={async values => {
await postDataToMyServer(values);
}}
/>
Note that there are different builds of the <LetsForm />
component optimized for the specific framework (i.e.,
import LetsForm from 'lets-form/react-bootstrap'
for React Bootstrap)
LetsForm JSON schema
The LetsForm JSON form schema describes the form (fields, validation, etc.)
Field | Type | Description |
---|---|---|
version | string | Version of LetsForm. Always “1” |
layout | string | The layout of the form: horizontal, vertical, inline |
disabled | boolean | Disable the entire form (all fields and buttons) |
readOnly | boolean | Set the form in read-only mode |
plaintext | boolean | Set the form in plaintext mode, useful for confirmations |
locales | [string] | Supported locales by the form (i.e., ['it-IT', 'en-US'] ) |
fields | [LetsFormField] | An array of fields definitions |
labelSubmit | string | Label for submit button. Default: Submit |
labelCancel | string | Label for cancel button. Default: Cancel |
buttonsAlign | string | Buttons alignment: left, right, center |
For example:
{
"$schema": "https://unpkg.com/lets-form/schemas/react-rsuite5/form.json",
"version": "1",
"layout": "horizontal",
"disable": false,
"readOnly": false,
"plaintext": false,
"locales": ["it-IT", "en-US"],
"fields": [ ... ]
}
Use the $schema
property to validate the schema, many modern code editors (i.e. Visual Studio Code) use the JSON schema
to help auto-completing the JSON. The preferred way to build the JSON form schema is using
LetsForm Designer .
LetsForm field
Fields are the smallest building block of LetsForm, the following are the common properties for all fields. More properties
are available based on the component
key
Field | Type | Description |
---|---|---|
name | string | The name of the field, the value. Must be unique within the form |
label | string | i18n | The visual label of the field |
hint | string | i18n | Show a small help for this field, it’s generally shown below the input field (but some frameworks may show it in a different way) |
required | boolean | Mark the field as required. Each UI framework has a different way of visually marking a field as required |
component | string | The field type (i.e., input-text ). Each component has a different set of parameters, see the list below |
See the complete list of parameters for each component: input-text, toggle, select, group, two-columns, three-columns, columns, array, input-number, slider, date, checkbox, checkbox-group, radio-group, input-tag, input-mask, textarea, rate, placeholder, multiselect, placeholder-image, button, divider, datetime, tabs, radio-tile, upload, buttons-toggle-group, steps, esm-module, time, hidden.
For example:
{
"component": "input-text",
"name": "my_field",
"label": "My Field",
"hint": "Some help for this field"
}
Some field properties are UI framework specific (i.e., valid for RSuite but not for Material UI), these can be either
specified in the root of the field object or in a sub-keys like in the example below block
is the sub-key react-rsuite5
.
Forms exported by LetsForm Designer will always use framework specific sub-keys.
A complete example of a LetsForm JSON scheme
{
"$schema": "https://unpkg.com/lets-form/schemas/react-rsuite5/form.json",
"version": 1,
"layout": "vertical",
"validationMode": "onSubmit",
"fluid": true,
"fields": [
{
"component": "text-input",
"label": "My Text",
"name": "my_field",
"hint": "Some help can be useful"
},
{
"component": "select",
"label": "My Select",
"name": "my_select",
"options": [
{
"value": "one",
"label": "One"
},
{
"value": "two",
"label": "Two"
}
],
"react-rsuite5": {
"block": true
}
}
]
}
LetsForm methods
<LetsForm/>
component also exposes some methods that can be call in an imperative way
Method | Return Type | Description |
---|---|---|
validate | object | null | Triggers programmatically the form validation, returns a validation object or null if the form is valid |
For example
const MyView = () => {
const ref = useRef();
return (
<>
<LetsForm
form={MY_FORM}
ref={ref}
/>
<input
type="button"
onClick={async () => {
// trigger validation programmatically
if (!await ref.current.validate()) {
return;
}
// do something
}}
/>
</input>
);
};