React Final Form Wizard Pattern
You're working with react-final-form
and you need to implement a Wizard Form.
Since this package uses hooks
under the hood, you need at least a minimum React version of 16.8.0.
yarn add @blackbox-vision/rff-wizard
npm install --save @blackbox-vision/rff-wizard
After reading and performing the previous steps, you should be able to import the library and use it like in this example:
- Create a
FormLayout
component:
import React from 'react';
const MyFormLayout = ({
handleSubmit,
activeStep,
isLastPage,
submitting,
children,
values,
onNext,
onBack,
}) => (
<form onSubmit={handleSubmit}>
<h1>My Form</h1>
{children}
<div className="buttons">
{activeStep > 0 && (
<button type="button" onClick={onBack}>
« Previous
</button>
)}
{!isLastPage && <button onClick={() => onNext(values)}>Next »</button>}
{isLastPage && (
<button type="submit" disabled={submitting}>
Submit
</button>
)}
</div>
</form>
);
MyFormLayout.displayName = 'MyFormLayout';
export default MyFormLayout;
- Create a custom
Form
:
import React from 'react';
import { Form, Field } from 'react-final-form';
import { WizardForm, WizardPage } from '@blackbox-vision/rff-wizard';
import MyFormLayout from './MyFormLayout';
const MyWizardForm = props => (
<WizardForm layout={MyFormLayout} onSubmit={values => alert(JSON.stringify(values, null, 2))}>
<WizardPage>
<Field
type="text"
name="firstname"
component="input"
placeholder="Firstname"
/>
<Field
type="text"
name="lastname"
component="input"
placeholder="Lastname"
/>
</WizardPage>
<WizardPage
validate={values => {
const errors = {};
if (!values.password) {
errors.password = 'Password is required';
}
return errors;
}}
>
<Field name="email" type="email" component="input" placeholder="Email" />
<Field
name="password"
type="password"
component="input"
placeholder="Password"
/>
</WizardPage>
</WizardForm>
);
MyWizardForm.displayName = 'MyForm';
export default MyWizardForm;
The WizardForm
component has the following props:
Properties | Types | Default Value | Description |
---|---|---|---|
initialStep | number | 0 | The initial step for the form |
layout | ReactElement | - | The Layout component to wrap the WizardForm |
Also, WizardForm
inherits all Form
props from react-final-form
.
The WizardPage
component has the following props:
Properties | Types | Default Value | Description |
---|---|---|---|
validate | function | - | A function that gives the form values and performs validation over fields |
Please, open an issue following one of the issues templates. We will do our best to fix them.
If you want to contribute to this project see contributing for more information.
Distributed under the MIT license. See LICENSE for more information.