01 Software

Components

FormRenderer

Headless form renderer

FormRenderer

A headless component for rendering forms created with the Form Builder plugin. Uses native HTML elements and is fully customizable via render functions.

Basic Usage

import { FormRenderer, toSubmissionData } from '@01.software/sdk/components'

function ContactForm({ form }) {
  const handleSubmit = async (values) => {
    await client.from('form-submissions').create({
      form: form.id,
      submissionData: toSubmissionData(values),
    })
  }

  return <FormRenderer form={form} onSubmit={handleSubmit} />
}

Props

PropTypeDescription
formFormForm Builder form object (required)
onSubmit(data: FormValues) => void | Promise<void>Submit handler (required)
classNamestring<form> CSS class
fieldClassNamestringField wrapper CSS class
buttonClassNamestringSubmit button CSS class
renderField(field, context, defaultRender) => ReactElementCustom field renderer
renderMessage(data: RichTextData) => ReactElementMessage block renderer
renderButton(props: { isSubmitting, label }) => ReactElementCustom button renderer

Supported Field Types

text, email, number, textarea, checkbox, select, country, state, message

Custom Field Rendering

<FormRenderer
  form={form}
  onSubmit={handleSubmit}
  renderField={(field, context, defaultRender) => {
    if (field.blockType === 'email') {
      return (
        <div className="custom-email">
          <input
            type="email"
            value={String(context.value)}
            onChange={(e) => context.onChange(e.target.value)}
          />
        </div>
      )
    }
    return defaultRender
  }}
/>

Exports

ExportDescription
FormValuesRecord<string, string | number | boolean>
FormFieldForm field union type
InputFieldInput field type (excludes message)
SubmissionData{ field: string; value: string }[]
FieldRenderContext{ value, onChange }
toSubmissionData(values)Converts FormValuesSubmissionData

On this page