npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

stark-react-native-form-builder

v0.2.1

Published

Package to create form using JSON schema

Downloads

19

Readme

React Native Form Builder

Package to create form using JSON schema

Installation

Install react native form builder

npm i --save stark-react-native-form-builder

Dependencies

Install dependent libraries

  • native-base ^3.0.2
  • react-native-modal-datetime-picker
  • @react-native-community/datetimepicker
  • simple-react-validator
  • react-native-step-indicator
  • react-native-image-crop-picker
  • react-native-multiple-select
  • react-native-google-places-autocomplete

This package is totally dependant on Native Base ^3.0.0

npm i --save native-base react-native-modal-datetime-picker @react-native-community/datetimepicker  simple-react-validator react-native-step-indicator react-native-image-crop-picker react-native-multiple-select react-native-google-places-autocomplete

Usage

Import this in your screen/component.

import FormBuilder from 'stark-react-native-form-builder';
import FormSchema from './formschema.json';

Use this in render / return

// some code


render() {
    return (
      <FormBuilder
        containerStyle={{}}
        formHeaderStyle={{}}
        headerTextStyle={{}}
        formSections={FormSections}
        formHeading="Registration"
        onFormSubmit={(formValues) => { console.log(formValues); }}
        options={options}
        callbacks={{}}
        defaultFormValues={defaultValues}
        currentUser={currentUser}
        submitBtnText=""
        showResetBtn
        resetBtnText="Clear"
        btnContainerStyle={{}}
        submitBtnStyle={{}}
        resetBtnStyle={{}}
        submitBtnTextStyle={{}}
        resetBtnTextStyle={{}}
        onFormReset={() => {
          console.log('form reset callback')
        }}
        fieldProps={{}}
        sectionProps={{}}
        isStepForm
        stepFormProps={{
          nextBtnText: 'Next >',
          prevBtnText: '< Prev',
          stepContainer: {},
          // renderLabel: (some) => { console.log('some', some); }
          // renderStepIndicator: (some) => { console.log('some', some); }
          customStyles: {},
        }}
      />
    );
}

Configurable props

  • containerStyle - Style object for form container

  • formHeaderStyle - Style object for form heading

  • headerTextStyle - Style object for form heading text

  • formHeading - Heading for form

  • formSections - JSON form schema for form

  • onFormSubmit - Callback for form submission, gives all form filled values NOTE: For image it will give you following response [{ uri: '', width: 10, height: 10, mime: image/*, data: imageData, sourceURL: '', fileName: '', }]

  • options - Pass options dynamically to Select box and Checkboxes

    options: {{
        subjects: [{value: 'maths', label: 'Maths'}, {value: 'chem', label: 'Chemistry'}],
    }}

    NOTE: Key must be same as input value, then only it'll patch the values

  • callbacks - On change callbacks for input type select change

    callbacks: {{
        callback1: (value) => { console.log(value); }
    }}
  • defaultFormValues - This will be used to set default values to form.

    defaultFormValues: {{
        name: 'Sample Name',
        email: '[email protected]'
    }}

    NOTE: Key must be same as input value, then only it'll patch values

  • apiKey - Google Places API required for type placesearch . For more info click here

  • currentUser - Current users role id, it'll be used to restrict users to fill particular fields.

  • submitBtnText - To change submit button text

  • showResetBtn - Boolean value to show form reset button

  • resetBtnText - To change reset button text

  • onFormReset - Callback on reset form

  • btnContainerStyle - Submit and reset buttons container style object to add custom styling

  • submitBtnStyle - Submit button style object

  • resetBtnStyle - Reset button style object

  • submitBtnTextStyle - Submit button text style object

  • resetBtnTextStyle - Reset button text style object

  • fieldProps - Props object for input fields

    • containerStyle - Style object for input field container
    • labelStyle - Style object for input label
      • style - Style object for Item component You can pass other supportive props of Item for eg. regular, rounded
    • inputStyle - Style object for input element
    • errorStyle - Style object for error
    • iconStyle - Style object for icon
    • icon - Icon for input
    • inputProps - You can pass input props by this props. For placesearch field you can check props here
    fieldProps={{
      email: {
        containerStyle: {},
        labelStyle: {},
        inputStyle: {
          color: 'red'
        },
        errorStyle: {},
        icon: <Entypo name="lock" />,
        inputProps: {}
      }
    }}

    NOTE: Key must be same as input value, then only it'll patch the props

  • sectionProps - Props object for sections

    • containerStyle - Style object for section
    • titleContainerStyle - Style object for title container
    • titleTextStyle - Style object for title text
    sectionProps={{
      userinfo: {
        containerStyle: {
          marginTop: 10
        },
        titleContainerStyle: {},
        titleTextStyle: {
          fontSize: 20
        }
      }
    }}

    NOTE: Key must be same as section name, then only it'll patch the props

  • isStepForm - Boolean value to state whether its step form or not

  • stepFormProps - (Optional)These are props for step form

    • nextBtnText - Text on next button
    • prevBtnText - Text on previous button
    • stepContainer - Style object for step indicator container
    • renderLabel - Callback to render label
    • renderStepIndicator - Callback to render step indicator
    • customStyles - Custom styles supported by react-native-step-indicator
    stepFormProps={{
      nextBtnText: 'Next >',
      prevBtnText: '< Prev',
      stepContainer: {},
      renderLabel: (some) => { console.log('some', some); }
      renderStepIndicator: (some) => { console.log('some', some); }
      customStyles: {},
    }}

JSON Schema

[
    {
        "name": "userinfo",
        "sectionTitle": "User info",
        "displaySection": true,
        "displaySectionTitle": true,
        "fields": [
            {
                "name": "name",
                "type": "text",
                "label": "Name",
                "placeholder": "",
                "validations": [
                    {
                        "type": "required",
                        "applyWhen": [],
                        "applyWhenRelation": "OR"
                    }
                ],
                "displayWhen": {
                    "conditions": [
                        {
                            "name": "gender",
                            "value": "female",
                            "condition": "=="
                        }
                    ],
                    "displayWhenRelation": "AND"
                },
                "disabled": false,
                "variant": "outline",
                "inputProps": {
                  "secureTextEntry": true
                },
                "allowedUsers": []
            }
        ]
    }
]

You can have multiple sections in schema.

Configurable JSON schema

  • sectionTitle - Title of section
  • containerClass - Class for section container
  • displaySection - (Boolean value) whether to display section or not
  • displaySectionTitle - (Boolean value) whether to display section title or not
  • sectionLayout - Layout of sections. Allowed types '1column', '2column'.
  • fields - Array of objects
    • name - Input name
    • type - Input type. Available type text, email, number, select, date, textarea, radio, checkbox, addmore, placesearch
    • label - Label for input field
    • placeholder - Placeholder for input type
    • validations - Validations for input element. Its array of objects
      • type - Type from react-simple-validator npm
      • applyWhen - Array of objects, conditions to apply validations
        • name - Input name
        • value - That input value
        • condition - Condition for name and value. Supported conditions are '==', '!=', '<=', '>=', '<', '>', 'empty', '!empty'
      • applyWhenRelation - 'AND'|'OR'. Relation for applyWhen conditions.
    • options - Array of objects. Options for 'radio','select','checkbox'.
      [{label: 'Option 1', value: 'option1'}, {label: 'Option 2', value: 'option2'}]
    • displayWhen - Object. This will be used for hide/show form element for particular conditions
      • conditions - Array of objects, conditions to apply validations
        • name - Input name
        • value - That input value
        • condition - Condition for name and value. Supported conditions are '==', '!=', '<=', '>=', '<', '>', 'empty', '!empty'
      • displayWhenRelation - 'AND'|'OR'. Relation for conditions.
    • variant - Variant for input fields.
    • disabled - To disable input field.
    • maxDateSelector - Form element name. If current type is date and to set maximum date this will be used
    • minDateSelector - Form element name. If current type is date and to set minimum date this will be used
    • callback - callback key. This will be called onchange of element
    • fields - If type is selected as "addmore" then to add fields under that input this options will be used.
    • fieldLayout - If type is selected as "addmore" then to set layout of add more section. Allowed types '1column', '2column'.
    • sectionClass - If type is selected as "addmore" then to add class for that section
    • inputProps - Extra props for input element e.g. "secureTextEntry": true.
    • itemProps - Extra props for Item component e.g. "regular": true.
    • fieldsToReset - Array of field names which values need to reset on change of select dropdown