Reasonably making forms sound good
Check our Docusaurus https://astrocoders.dev/reform
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"
]
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.
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},
(),
);
};
lerna version major|patch|minor
and then
lerna publish from-git
We usually hang out at https://discord.gg/reasonml or https://reasonml.chat so feel free to ask anything there.