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

react-formie-forms

v1.0.0-alpha.64

Published

Renders Craft CMS Formie forms in React apps.

Downloads

167

Readme

Integrate Formie forms into React applications faster.

Under the hood we’re using Formik for validation, enabling a more extensible solution via it’s context APIs.

Usage

Below is a simple example. The <Formie /> component will render a full Formie form with validation, including multi-page forms.

import {
  defaultComponents,
  FIELD_TYPE,
  Formie,
  submitForm,
} from "react-formie-forms";
import MyCustomInputComponent from "@/components/MyCustomInputComponent";

// You can override components to style as you want
const components = {
  ...defaultComponents,
  [FIELD_TYPE.SINGLE_LINE_TEXT]: MyCustomInputComponent,
};

export default function FormieWrapper({ formDataFromGraphQl, ...props }) {
  return (
    <Formie
      form={formDataFromGraphQl}
      components={components}
      onSubmit={submitForm("/path/to/formie/submit/action")}
      {...props}
    />
  );
}

Props

  • The required form prop expects the form data queried via GraphQL.
  • The required onSubmit prop expects a promise (i.e. fetch). If you have an endpoint you can just use the submitForm helper method and it’ll take care of everything for you.
  • The components prop allow you to override each different field/component type used in the form.

See the useFormieForm hook and Formik’s useFormik hook for all available props.

The <Formie /> component is a wrapper for the useFormieForm hook and includes some sensible defaults. In 99% of scenarios, this is how you should integrate this library.

GraphQL

The following is an example GraphQL fragment used to query the above form data.

fragment form on FormInterface {
  title
  handle
  settings {
    defaultInstructionsPosition
    defaultLabelPosition
    displayCurrentPageTitle
    displayFormTitle
    displayPageProgress
    displayPageTabs
    loadingIndicator
    loadingIndicatorText
    submitActionFormHide
    submitMethod
  }
  pages {
    id
    name
    rows {
      id
      fields {
        id
        conditions
        containerAttributes {
          label
          value
        }
        cssClasses
        displayName
        enableConditions
        errorMessage
        handle
        inputAttributes {
          label
          value
        }
        labelPosition
        limitAmount
        name
        placeholder
        required
        type
        instructions
        instructionsPosition
        ... on Field_SingleLineText {
          defaultValue
        }
        ... on Field_MultiLineText {
          defaultValue
        }
        ... on Field_Checkboxes {
          options {
            label
            value
            isDefault
          }
        }
        ... on Field_Dropdown {
          options {
            label
            value
            isDefault
          }
        }
        ... on Field_Radio {
          options {
            label
            value
            isDefault
          }
        }
      }
    }
    settings {
      backButtonLabel
      buttonsPosition
      enablePageConditions
      pageConditions
      showBackButton
      submitButtonLabel
    }
  }
}