8000 GitHub - mlms13/reform: Reasonably making forms sound good
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

mlms13/reform

< 8000 script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_tanstack_query-core_build_modern_queryObserver_js-node_modules_tanstack_-defd52-4fadb0b8d069.js">
 
 

Repository files navigation

ReForm.re

Reasonably making forms sound good

Docs

Check our Docusaurus https://astrocoders.dev/reform

Installation

yarn add bs-reform

Then add it to bsconfig.json

"bs-dependencies": [
 "bs-reform"
]

Then add lenses-ppx

yarn add lenses-ppx@2.0.0 -D

And update your bsconfig.json with ppx-flags

"ppx-flags": [
 "lenses-ppx/ppx"
]

What this is and why

Code that deals with strongly typed forms can quickly become walls of repeated text. We created ReForm to be both deadly simple and to make forms sound good leveraging ReasonML's powerful typesytem. Even the schemas we use are nothing more than constructors built-in in the language itself with a small size footprint.

Usage with hooks

Checkout packages/demo/src/PostAddNext.re also

module StateLenses = [%lenses
  type state = {
    description: string,
    title: string,
    acceptTerms: bool,
  }
];
module PostAddForm = ReFormNext.Make(StateLenses);

[@react.component]
let make = () => {
  let {state, submit, getFieldState, handleChange}: PostAddForm.api =
    PostAddForm.use(
      ~schema={
        PostAddForm.Validation.Schema([|
          StringMin(Title, 20),
          StringNonEmpty(Description),
          Custom(
            AcceptTerms,
            values =>
              values.acceptTerms == false
                ? Error("You must accept all the terms") : Valid,
          ),
        |]);
      },
      ~onSubmit=
        ({state}) => {
          mutate(
            ~variables=
              PostAddMutationConfig.make(
                ~title=state.values.title,
                ~description=state.values.description,
                (),
              )##variables,
            (),
          )
          |> Js.Promise.then_(result =>
               setResult(_ => Some(result)) |> Js.Promise.resolve
             )
          |> ignore;

          None;
        },
      ~initialState={title: "", description: "", acceptTerms: false},
      (),
    );
};

Alternatives

Publishing

lerna version major|patch|minor

and then

lerna publish from-git

Support

We usually hang out at https://discord.gg/reasonml or https://reasonml.chat so feel free to ask anything there.

About

Reasonably making forms sound good 🛠️

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • OCaml 41.3%
  • C++ 31.4%
  • JavaScript 24.9%
  • HTML 1.8%
  • CSS 0.6%
0