0.2.0 • Published 6 years ago

react-schema-final-form v0.2.0

Weekly downloads
7
License
MIT
Repository
github
Last release
6 years ago

React-Schema-Final-Form Build Status

A simple hoc to build a form based on react-final-form and JSON Schema. This library is highly inspried by Liform-react

Installation

Via npm into a fresh project:

npm install react-schema-final-form

Or use the yarn to install that:

yarn add react-schema-final-form

Basic Usage

The React-schema-final-form will return a component called <RenderedFields />, which will be a bunch of Fields based on the the json schema. it will also return a validator called validate that we can use to validate the data based on the json schema.

import SchemaForm from 'react-schema-final-form';
// You can build you own theme based on the example right here.
import theme from 'react-schema-final-form-material-ui';

// Some schema which the outermost layer is object
const schema = {
  // other properties.
  type: 'object',
  properties: {
    foo: {
      type: 'string',
      title: 'Foo',
    },
    bar: {
      type: 'integer',
      title: 'Bar',
    },
  },
  required: [foo]
}

const Form = props => {
  const {
    schema,
  } = props;
  return (
    // The schema and the theme are required
    <SchemaForm
      schema={schema}
      theme={theme}
    >
      {({ RenderedFields, validate }) => (
        // The RenderedFields will be the Field components based on the theme we created, the validate will be the sync validator based on the ajv json schema validator.
        <Form
          onSubmit={values => window.alert(JSON.stringify(values, 0, 2))}
          validate={validate}
          validateOnBlur
        >
          {({ handleSubmit, pristine, invalid }) => (
            <form onSubmit={handleSubmit}>
              <RenderedFields />
              {/* You can put anything strange here */}
              <button type="submit" disabled={pristine || invalid}>
                Submit
              </button>
            </form>
          )}
        </Form>
      )}
    </SchemaForm>
  )
}

Customization

This library will render the <Field /> based on the theme you provided in. The theme is basically is object. By default, it will render them by the type. For example, if your json-schema looks like this:

const schema = {
  type: 'string',
}

// theme/index.js
import OtherTheme from 'react-schema-final-form-material-ui';
import StringWidget from './StringWidget';

const theme = {
  ...OtherTheme,
  string: StringWidget,
}

If we overwrite the string. we will render the string based on StringWidget.

Please refer to the react-schema-final-form-material-ui for examples about how to write a theme.

Feature Support

  • real-time validation
  • $ref support
  • allOf support
  • oneOf support
  • anyOf support
0.2.0

6 years ago

0.1.12

6 years ago

0.1.11

6 years ago

0.1.7

6 years ago

0.1.6

6 years ago

0.1.5

6 years ago

0.1.4

6 years ago

0.1.3

6 years ago

0.1.2

6 years ago

0.1.1

6 years ago

0.1.0

6 years ago

0.0.15

6 years ago

0.0.14

6 years ago

0.0.13

6 years ago

0.0.12

6 years ago

0.0.11

6 years ago

0.0.10

6 years ago

0.0.9

6 years ago

0.0.8

6 years ago

0.0.7

6 years ago

0.0.6

6 years ago

0.0.5

6 years ago

0.0.4

6 years ago

0.0.3

6 years ago

0.0.2

6 years ago