import React, {ReactNode, useState} from "react"; import {Form, Formik, FormikBag, FormikHelpers} from "formik"; import {ArrowLeft, ArrowRight, Check, SpinnerGap} from "@phosphor-icons/react"; import {Button} from "Frontend/@/components/ui/button"; const Wizard = ({children, initialValues, onSubmit}: { children: ReactNode, initialValues: any, onSubmit: (values: any, bag: FormikHelpers | FormikBag) => Promise }) => { const [stepNumber, setStepNumber] = useState(0); const steps = React.Children.toArray(children); const [snapshot, setSnapshot] = useState(initialValues); const step = steps[stepNumber]; const totalSteps = steps.length; const isFirstStep = stepNumber === 0; const isLastStep = stepNumber === totalSteps - 1; const next = (values: any) => { setSnapshot(values); setStepNumber(Math.min(stepNumber + 1, totalSteps - 1)); }; const previous = (values: any) => { setSnapshot(values); setStepNumber(Math.max(stepNumber - 1, 0)); }; const handleSubmit = async (values: any, bag: FormikBag | FormikHelpers) => { /*// @ts-ignore*/ if (step.props.onSubmit) { /*// @ts-ignore*/ await step.props.onSubmit(values, bag); } if (isLastStep) { return onSubmit(values, bag); } else { await bag.setTouched({}); next(values); } }; return ( {formik => (

Step {stepNumber + 1} of {steps.length}

{/* {steps.map((child, index) => ( {child.props.icon} ))} */}
{step}
)}
); }; export default Wizard;