diff --git a/packages/ui/src/makerkit/multi-step-form.tsx b/packages/ui/src/makerkit/multi-step-form.tsx index 9b245ce2d..b3f8c8f44 100644 --- a/packages/ui/src/makerkit/multi-step-form.tsx +++ b/packages/ui/src/makerkit/multi-step-form.tsx @@ -16,6 +16,7 @@ import { Path, UseFormReturn } from 'react-hook-form'; import { z } from 'zod'; import { cn } from '../utils'; +import {useMutation} from "@tanstack/react-query"; interface MultiStepFormProps { schema: T; @@ -77,7 +78,7 @@ export function MultiStepForm({ }, [children]); const stepNames = steps.map((step) => step.props.name); - const multiStepForm = useMultiStepForm(schema, form, stepNames); + const multiStepForm = useMultiStepForm(schema, form, stepNames, onSubmit); return ( @@ -169,6 +170,7 @@ export function useMultiStepForm( schema: Schema, form: UseFormReturn>, stepNames: string[], + onSubmit: (data: z.infer) => void, ) { const [state, setState] = useState({ currentStepIndex: 0, @@ -282,6 +284,12 @@ export function useMultiStepForm( const isValid = form.formState.isValid; const errors = form.formState.errors; + const mutation = useMutation({ + mutationFn: () => { + return form.handleSubmit(onSubmit)(); + } + }); + return useMemo( () => ({ form, @@ -297,9 +305,11 @@ export function useMultiStepForm( isStepValid, isValid, errors, + mutation, }), [ form, + mutation, stepNames, state.currentStepIndex, state.direction, @@ -406,11 +416,15 @@ function AnimatedStep({ const visibilityClasses = isActive ? 'opacity-100' : 'opacity-0 absolute'; - const transformClasses = cn('translate-x-0', isActive ? {} : { - '-translate-x-full': direction === 'forward' || index < currentIndex, - 'translate-x-full': direction === 'backward' || index > currentIndex, - }); - + const transformClasses = cn( + 'translate-x-0', + isActive + ? {} + : { + '-translate-x-full': direction === 'forward' || index < currentIndex, + 'translate-x-full': direction === 'backward' || index > currentIndex, + }, + ); const className = cn(baseClasses, visibilityClasses, transformClasses);