-
-
Notifications
You must be signed in to change notification settings - Fork 486
Open
Labels
Description
Description
When building a form stepper, like so:
It's common for each step to have its own form. However, this complicates the form submission and validation process by requiring you to add complex logic.
Ideally, it would be nice to have a FormGroup where you could validate the group, but not the form itself - submit
the value and move on to the next step.
Describe the solution you'd like
What if there was something like this psuedo-API?
import { useState } from "react";
import { useForm } from "@tanstack/react-form";
// Import might change
import { za } from "@tanstack/zod-form-adapter";
const StepperForm = () => {
const [step, setStep] = useState(0);
const form = useForm({ onSubmit: () => {} });
return (
<form.Provider>
<form {...form.getFormProps()}>
<div>
{step === 1 && (
<form.FormGroup
onGroupSubmit={() => {
setStep(step + 1);
}}
preserveState={true}
>
<form.Field
name="step1.name"
onSubmit={za(z.string().thing())}
onGroupSubmit={za(z.string().thing())}
>
<Input />
</form.Field>
</form.FormGroup>
)}
{step === 2 && (
<form.FormGroup onGroupSubmit={submit} preserveState={true}>
<form.Field
name="step2.name"
onSubmit={za(z.string().thing())}
onGroupSubmit={za(z.string().thing())}
>
<Input />
</form.Field>
</form.FormGroup>
)}
</div>
</form>
</form.Provider>
);
};
timothyac, francesconi, PhilippSchoenauer, stuppner, KingJune28 and 61 moredd-jonas, Christian24, sadeghbarati, Balastrong, neefrehman and 12 more