Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

react-jsonschema-form-material-ui

vip-git1.1kISC3.0.0-rc.10TypeScript support: included

Material UI implementation of react-jsonschema-form with UI and XHR Schema.

json-schema-forms

readme

React Json Schema Form (Mui)

This Project will soon become a umbrella repo for JSON Schema Support to major Frameworks and UI Frameworks. 

More info on this has been outlined in Universal JSON Schema document. # codecov Known Vulnerabilities GitHub package.json version npm GitHub issues GitHub pull requests

Build and Test CI BrowserStack Status Build Status

A Material UI port of jsonschema-form.

A live playground and Detailed Docs

Install instructions via npm (MUI 5+)

npm install --save react-jsonschema-form-material-ui

Follow Releases page to use latest or preleased tags.

For legacy version of < MUI 4

npm install --save react-jsonschema-form-material-ui@3.0.0-mui-4

Basic Example Usage

// Library
import React from 'react';
import MaterialJsonSchemaForm from 'react-jsonschema-form-material-ui';

// Internals
import schema from '../simple/schema.json';
import uiSchema from '../simple/ui-schema.json';
const givenXhrSchema = require('./path-to your-xhr-schema.json'); // Optional
import givenFormData from '../simple/form-data.json';

export default () => {
  const [formData, setFormData] = React.useState(givenFormData);

  return <MaterialJsonSchemaForm 
            schema={schema} 
            uiSchema={uiSchema} 
        xhrSchema={givenXhrSchema || {}} // Optional
        theme={} // Optional - You need to explicitly provide your custom theme from MUI5 onwards
            formData={formData} 
            onChange={({ formData }) => setFormData(formData)}
            onSubmit={(submittedData) => console.log('form submitted', submittedData)}
          />;
};

Advanced Example Usage

More detailed example can be seen here

// Library
import React from 'react';
import MaterialJsonSchemaForm from 'react-jsonschema-form-material-ui';

// Internals
const givenSchema = require('./path-to your-schema.json');
const givenUISchema = require('./path-to your-ui-schema.json');
const givenXhrSchema = require('./path-to your-xhr-schema.json');
const givenFormData = require('./path-to your-ui-formData.json');

const Example () => {

    const [formData, setFormData] = React.useState(givenFormData);

    const onSubmit = (value, callback) => {
        console.log('onSubmit: %s', JSON.stringify(value)); // eslint-disable-line no-console
        setTimeout(() => callback && callback(), 2000); // just an example in real world can be your XHR call
    }

    const onCancel = () => {
        console.log('on reset being called');
    }

    const onFormChanged = ({ formData }) => setFormData(formData);

    const onUpload = (value) => {
        console.log('onUpload: ', value); // eslint-disable-line no-console
    }

    return (
         <MaterialJsonSchemaForm
        // Define Schema
        schema={givenSchema}
        uiSchema={givenUISchema}
        xhrSchema={givenXhrSchema || {}}
            formData={formData}
        theme={} // Optional - You need to explicitly provide your custom theme from MUI5 onwards

        // Define Event handlers
            onChange={onFormChanged} 
        onSubmit={onSubmit}

        // Every Prop below is optional - every prop above this line is required
            onCancel={onCancel} /* optional */
        onUpload={onUpload} /* optional */
            onError={onError} /* optional */

            /* Optional Prop for custom functions to be executed for transforming data */
            interceptors={{
                translateRatings: (givenData, uiData) => ({ givenData, uiData }),
            }}

            /* Optional Prop for custom components */
        components={{
          customComponent: ({ onChange, ...rest }) => (
            <CustomComponent onChange={onChange} formData={givenFormData} uiData={givenUIData} {...rest} />
          ),
          customRating: ({ onChange, ...rest }) => (
            <CustomRating onChange={onChange} formData={givenFormData} uiData={givenUIData} {...rest} />
          ),
        }}

            /* Optional Prop for custom validation */
            validations={{
                confirmPassword: ({ schema, validations, formData, value }) => value !== formData.pass1 && ({
              message: validations.confirmPassword.message,
              inline: true,
                }),
            }}

            /* Optional Prop to auto submit form on press of enter */
        submitOnEnter
    />
    );
}

export default Example;

Latest Version npm version [JSONSchema-Draft-7 Support]

  • Build system now upgraded to webpack 5
  • React select values are no longer stringify results but array values.
  • New Tabs UI to divide sub sections to tabs
  • Additional Properties and Additional Items feature enabled
  • "ui:options" and "ui:style" enabled for prop passing and styling every field
  • On the fly module creation
  • Reference Schema's via http and inline references
  • Support alternatives - oneOf, anyOf, allOf
  • Support for dependencies - array of conditionals
  • new Prop onError to get errors available in form on every change
  • new Prop uiData to control ui only data to add separation of concern with form data
  • Demo updated with monaco editor and live validation changes
  • New interceptors to transform form and uiData using uiSchema - ui:interceptor

For more info you can follow our changelog

Contributing

We welcome all contributions, enhancements, and bug-fixes. Open an issue on GitHub and submit a pull request.

Building/Testing

To build/test the project locally on your computer:

Fork this repo and then clone

git clone https://github.com/vip-git/universal-json-schema.git

Install dependencies and module generator

npm install

Run the demo to test your changes

npm start (open http://localhost:3005 once build is successful)

Run the tests once you are done with your changes

npm test

You can send a PR through and a release will be made following Semantic Versioning once your PR gets merged.

changelog

[WIP] 3.0.0

Follow Releases to get detailed overview
  • Strict support for JSONSchema-Draft-7 including validations using Ajv
  • Complete rewrite of v2 using Typescript
  • Build system now upgraded to Webpack 5
  • Support for Material UI 5
  • Support for React 17 and NextJS 10
  • React select values are no stringify results but real values.
  • New Tabs and Stepper UI using ui:page -> "ui:layout": "tabs"
  • Additional Properties and Additional Items feature enabled
  • "ui:options" and "ui:style" enabled for prop passing and styling every field
  • On the fly module creation
  • Reference Schema's via http and inline references
  • Support alternatives - oneOf, anyOf
  • Support for dependencies - array of conditionals
  • new Prop onError to get errors available in form on every change
  • New interceptors prop to transform form and uiData using uiSchema - [ui:interceptor]./demo/examples/simple/ui-schema.json#L84)
  • new concept called uiData to control ui only data to add seperation of concern with form data needs use of interceptors
  • Demo updated with vscode editor and live validation changes
  • New xhrSchema feature enabled to make xhr calls onload, onsubmit and onclick to consume or post data
  • type: null support included for custom div support
  • Integration with xstate for logic refactors
  • XHR Schema now supports ui:errors which includes errors by statusCodes and a special case for offline Example :
      "ui:errors": {
          "offline": {
          "title": "You are Offline !",
          "message": "Please try again once you are online."
          }
      }

Previously version 2.x.x

  • New version 2.0 support for material ui 4
  • Webpack 4 integration
  • Material UI picker module updated
  • Support for File Upload and many more components
  • Performance efficient refactored library size (233kb gzip and 914kb non-gzip)

Support for Material UI < 3.9

New components integrated / Updates

  • Material UI Date / time picker
  • Material UI Multi-selecbox
  • Creatable multi selectbox
  • Component active / inactive
  • Rich Text Editor
  • Upload File
  • submitOnEnter prop - enables to submit form on key press 'Enter'
  • activityIndicatorEnabled prop - enables nice activity indicator besides your submit button allowing you to control the timing via a callback.