UNPKG

react-form-builder-devextreme

Version:

A complete form builder for react. Some changes to design

291 lines (233 loc) 10.8 kB
[![npm version](https://badge.fury.io/js/react-form-builder2.svg)](//npmjs.com/package/react-form-builder2) [![downloads](https://img.shields.io/npm/dm/react-form-builder2.svg)](https://img.shields.io/npm/dm/react-form-builder2.svg) # React Form Builder 2 A complete react form builder that interfaces with a json endpoint to load and save generated forms. - Upgraded to React 16.8.6 - Bootstrap 4.x, Font-Awesome 5.x - Use react-dnd for Drag & Drop - Save form data with dummy api server - Show posted data on readonly form - Multi column row - Custom Components [DEMO](https://kiho.github.io/react-form-builder/) Slow Loading.... back-end is running at FREE Heroku, hence it may not work if free time runs out for month. ![](screenshot.png) ### Editing Items ![](screenshot2.png) # Basic Usage ```javascript import React from 'react'; import ReactDOM from 'react-dom'; import { ReactFormBuilder } from 'react-form-builder2'; import 'react-form-builder2/dist/app.css'; ReactDOM.render(<ReactFormBuilder />, document.body); ``` # Props ```javascript var items = [ { key: 'Header', name: 'Header Text', icon: 'fa fa-header', static: true, content: 'Placeholder Text...', }, { key: 'Paragraph', name: 'Paragraph', static: true, icon: 'fa fa-paragraph', content: 'Placeholder Text...', }, ]; <ReactFormBuilder url="path/to/GET/initial.json" toolbarItems={items} saveUrl="path/to/POST/built/form.json" />; ``` # React Form Generator Now that a form is built and saved, let's generate it from the saved json. ```javascript import React from 'react'; import ReactDOM from 'react-dom'; import { ReactFormGenerator } from 'react-form-builder2'; import 'react-form-builder2/dist/app.css'; ReactDOM.render( <ReactFormGenerator form_action="/path/to/form/submit" form_method="POST" task_id={12} // Used to submit a hidden variable with the id to the form from the database. answer_data={JSON_ANSWERS} // Answer data, only used if loading a pre-existing form with values. authenticity_token={AUTH_TOKEN} // If using Rails and need an auth token to submit form. data={JSON_QUESTION_DATA} // Question data />, document.body ); ``` ### Form Params | Name | Type | Required? | Description | | ------------------ | -------- | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | form_action | string | Required | URL path to submit the form | | form_method | string | Required | Verb used in the form submission. | | action_name | string | Optional | Defines form submit button text. Defaults to "Submit" | | onSubmit | function | optional | Invoke when submit data, if exists will override form post. | | data | array | Required | Question data retrieved from the database | | back_action | string | Optional | URL path to go back if needed. | | back_name | string | Optional | Button text for back action. Defaults to "Cancel". | | task_id | integer | Optional | User to submit a hidden variable with id to the form on the backend database. | | answer_data | array | Optional | Answer data, only used if loading a pre-existing form with values. | | authenticity_token | string | Optional | If using Rails and need an auth token to submit form. | | hide_actions | boolean | Optional | If you would like to hide the submit / cancel buttons set to true. | | skip_validations | boolean | Optional | Suppress form validations on submit, if set to true. | | display_short | boolean | Optional | Display an optional "shorter page/form" which is common for legal documents or situations where the user will just have to sign or fill out a shorter form with only the critical elements. | | read_only | boolean | Optional | Shows a read only version which has fields disabled and removes "required" labels. | | variables | object | Optional | Key/value object that can be used for Signature variable replacement. | ### Read only Signatures Read only signatures allow you to use a saved/canned signature to be placed into the form. The signature will be passed in through the `variables` property to `ReactFormGenerator` and `ReactFormBuilder`. To use a read only signature, choose the "Read only" option and enter the key value of the variable that will be used to pass in the signature. ![](screenshot3.png) The signature data should be in base 64 format. There is a `variables.js` file that contains a sample base 64 signature. This variable is passed into the demo builder and generator for testing. Use the variable key "JOHN" to test the variable replacement. # Vendor Dependencies In order to make the form builder look pretty, there are a few dependencies other than React. Style sheets from `Bootstrap` and `FontAwesome` must be added to index.html. See the example code in [index.html](https://github.com/Kiho/react-form-builder/blob/master/public/index.html#L5) for more details. - Bootstrap - FontAwesome # SASS All relevant styles located in css/application.css.scss. # Develop ```bash $ yarn install $ yarn run build:dist $ yarn run serve:api $ yarn start ``` Then navigate to http://localhost:8080/ in your browser and you should be able to see the form builder in action. # Customizations - to customize the field edit form copy "src/form-elements-edit.jsx" to your project and pass it to the ReactFormBuilder as a prop. Here is an example ```jsx <ReactFormBuilder edit data={form} //toolbarItems={items} customToolbarItems={items} onChange={handleUpdate} onSubmit={handleSubmit} renderEditForm={(props) => <FormElementsEdit {...props} />} /> ``` - to customize the ReactFormGenerator submit button use it like this ```jsx <ReactFormGenerator data={form} toolbarItems={items} onChange={handleUpdate} onSubmit={handleSubmit} actionName="Set this to change the default submit button text" submitButton={ <button type="submit" className="btn btn-primary"> Submit </button> } backButton={ <a href="/" className="btn btn-default btn-cancel btn-big"> Back </a> } /> ``` # Custom Components - Import component registry from react-form-builder2 ```jsx import { ReactFormBuilder, ElementStore, Registry } from 'react-form-builder2'; ``` - Simple Custom Component ```jsx const TestComponent = () => <h2>Hello</h2>; ``` - Custom Component with input element ```jsx const MyInput = React.forwardRef((props, ref) => { const { name, defaultValue, disabled } = props; return ( <input ref={ref} name={name} defaultValue={defaultValue} disabled={disabled} /> ); }); ``` - Register custom components to be used in form builder ```jsx Registry.register('MyInput', MyInput); Registry.register('TestComponent', TestComponent); ``` - Define Custom Components in Toolbar ```jsx const items = [ { key: 'TestComponent', element: 'CustomElement', component: TestComponent, type: 'custom', field_name: 'test_component', name: 'Something You Want', icon: 'fa fa-cog', static: true, props: { test: 'test_comp' }, label: 'Label Test', }, { key: 'MyInput', element: 'CustomElement', component: MyInput, type: 'custom', forwardRef: true, field_name: 'my_input_', name: 'My Input', icon: 'fa fa-cog', props: { test: 'test_input' }, label: 'Label Input', }, // Additional standard components, you don't need full definition if no modification is required. { key: 'Header', }, { key: 'TextInput', }, { key: 'TextArea', }, { key: 'RadioButtons', }, { key: 'Checkboxes', }, { key: 'Image', }, ]; ``` - Use defined Toolbar in ReactFormBuilder ```jsx <ReactFormBuilder ... toolbarItems={items} /> ``` - Find working example [here](https://github.com/Kiho/react-form-builder/blob/master/examples/custom/app.js) # Examples - [Basic](https://github.com/Kiho/react-form-builder/tree/master/examples/demo) - [JSON Post](https://github.com/Kiho/react-form-builder/tree/master/examples/custom) - [UMD](https://github.com/Kiho/react-form-builder/tree/master/examples/umd) - [NEXT](https://github.com/Kiho/react-form-builder/tree/master/examples/next) - [NEXT-Mongo](https://github.com/Kiho/react-form-builder/tree/master/examples/mongo) - [create-react-app](https://github.com/Kiho/react-form-builder/tree/master/examples/cra) # Tests ```bash $ npm test ``` Test is not working at this moment.