Files
digifi-bko/src/app/modules/wizards/components/Vertical.tsx
T
CHIEFSOFT\ameye 99e22d697b first commit
2024-04-17 09:36:56 -04:00

265 lines
9.7 KiB
TypeScript

import {useEffect, useRef, useState} from 'react'
import {KTIcon} from '../../../../_metronic/helpers'
import {Step1} from './steps/Step1'
import {Step2} from './steps/Step2'
import {Step3} from './steps/Step3'
import {Step4} from './steps/Step4'
import {Step5} from './steps/Step5'
import {StepperComponent} from '../../../../_metronic/assets/ts/components'
import {Form, Formik, FormikValues} from 'formik'
import {createAccountSchemas, ICreateAccount, inits} from './CreateAccountWizardHelper'
import { ToolbarWrapper } from '../../../../_metronic/layout/components/toolbar'
import { Content } from '../../../../_metronic/layout/components/content'
const Vertical = () => {
const stepperRef = useRef<HTMLDivElement | null>(null)
const [ stepper, setStepper ] = useState<StepperComponent | null>(null)
const [currentSchema, setCurrentSchema] = useState(createAccountSchemas[0])
const [initValues] = useState<ICreateAccount>(inits)
const loadStepper = () => {
setStepper(StepperComponent.createInsance(stepperRef.current as HTMLDivElement))
}
const prevStep = () => {
if (!stepper) {
return
}
stepper.goPrev()
setCurrentSchema(createAccountSchemas[stepper.currentStepIndex - 1])
}
const submitStep = (values: ICreateAccount, actions: FormikValues) => {
if (!stepper) {
return
}
if (stepper.currentStepIndex !== stepper.totalStepsNumber) {
stepper.goNext()
} else {
stepper.goto(1)
actions.resetForm()
}
console.log(values);
setCurrentSchema(createAccountSchemas[stepper.currentStepIndex - 1])
}
useEffect(() => {
if (!stepperRef.current) {
return
}
loadStepper()
}, [stepperRef])
return (
<>
<ToolbarWrapper />
<Content>
<div
ref={stepperRef}
className='stepper stepper-pills stepper-column d-flex flex-column flex-xl-row flex-row-fluid'
id='kt_create_account_stepper'
>
{/* begin::Aside*/}
<div className='card d-flex justify-content-center justify-content-xl-start flex-row-auto w-100 w-xl-300px w-xxl-400px me-9'>
{/* begin::Wrapper*/}
<div className='card-body px-6 px-lg-10 px-xxl-15 py-20'>
{/* begin::Nav*/}
<div className='stepper-nav'>
{/* begin::Step 1*/}
<div className='stepper-item current' data-kt-stepper-element='nav'>
{/* begin::Wrapper*/}
<div className='stepper-wrapper'>
{/* begin::Icon*/}
<div className='stepper-icon w-40px h-40px'>
<i className='stepper-check fas fa-check'></i>
<span className='stepper-number'>1</span>
</div>
{/* end::Icon*/}
{/* begin::Label*/}
<div className='stepper-label'>
<h3 className='stepper-title'>Account Type</h3>
<div className='stepper-desc fw-semibold'>Setup Your Account Details</div>
</div>
{/* end::Label*/}
</div>
{/* end::Wrapper*/}
{/* begin::Line*/}
<div className='stepper-line h-40px'></div>
{/* end::Line*/}
</div>
{/* end::Step 1*/}
{/* begin::Step 2*/}
<div className='stepper-item' data-kt-stepper-element='nav'>
{/* begin::Wrapper*/}
<div className='stepper-wrapper'>
{/* begin::Icon*/}
<div className='stepper-icon w-40px h-40px'>
<i className='stepper-check fas fa-check'></i>
<span className='stepper-number'>2</span>
</div>
{/* end::Icon*/}
{/* begin::Label*/}
<div className='stepper-label'>
<h3 className='stepper-title'>Account Settings</h3>
<div className='stepper-desc fw-semibold'>Setup Your Account Settings</div>
</div>
{/* end::Label*/}
</div>
{/* end::Wrapper*/}
{/* begin::Line*/}
<div className='stepper-line h-40px'></div>
{/* end::Line*/}
</div>
{/* end::Step 2*/}
{/* begin::Step 3*/}
<div className='stepper-item' data-kt-stepper-element='nav'>
{/* begin::Wrapper*/}
<div className='stepper-wrapper'>
{/* begin::Icon*/}
<div className='stepper-icon w-40px h-40px'>
<i className='stepper-check fas fa-check'></i>
<span className='stepper-number'>3</span>
</div>
{/* end::Icon*/}
{/* begin::Label*/}
<div className='stepper-label'>
<h3 className='stepper-title'>Business Info</h3>
<div className='stepper-desc fw-semibold'>Your Business Related Info</div>
</div>
{/* end::Label*/}
</div>
{/* end::Wrapper*/}
{/* begin::Line*/}
<div className='stepper-line h-40px'></div>
{/* end::Line*/}
</div>
{/* end::Step 3*/}
{/* begin::Step 4*/}
<div className='stepper-item' data-kt-stepper-element='nav'>
{/* begin::Wrapper*/}
<div className='stepper-wrapper'>
{/* begin::Icon*/}
<div className='stepper-icon w-40px h-40px'>
<i className='stepper-check fas fa-check'></i>
<span className='stepper-number'>4</span>
</div>
{/* end::Icon*/}
{/* begin::Label*/}
<div className='stepper-label'>
<h3 className='stepper-title'>Billing Details</h3>
<div className='stepper-desc fw-semibold'>Set Your Payment Methods</div>
</div>
{/* end::Label*/}
</div>
{/* end::Wrapper*/}
{/* begin::Line*/}
<div className='stepper-line h-40px'></div>
{/* end::Line*/}
</div>
{/* end::Step 4*/}
{/* begin::Step 5*/}
<div className='stepper-item' data-kt-stepper-element='nav'>
{/* begin::Wrapper*/}
<div className='stepper-wrapper'>
{/* begin::Icon*/}
<div className='stepper-icon w-40px h-40px'>
<i className='stepper-check fas fa-check'></i>
<span className='stepper-number'>5</span>
</div>
{/* end::Icon*/}
{/* begin::Label*/}
<div className='stepper-label'>
<h3 className='stepper-title'>Completed</h3>
<div className='stepper-desc fw-semibold'>Woah, we are here</div>
</div>
{/* end::Label*/}
</div>
{/* end::Wrapper*/}
</div>
{/* end::Step 5*/}
</div>
{/* end::Nav*/}
</div>
{/* end::Wrapper*/}
</div>
{/* begin::Aside*/}
<div className='d-flex flex-row-fluid flex-center bg-body rounded'>
<Formik validationSchema={currentSchema} initialValues={initValues} onSubmit={submitStep}>
{() => (
<Form className='py-20 w-100 w-xl-700px px-9' noValidate id='kt_create_account_form' placeholder={undefined}>
<div className='current' data-kt-stepper-element='content'>
<Step1 />
</div>
<div data-kt-stepper-element='content'>
<Step2 />
</div>
<div data-kt-stepper-element='content'>
<Step3 />
</div>
<div data-kt-stepper-element='content'>
<Step4 />
</div>
<div data-kt-stepper-element='content'>
<Step5 />
</div>
<div className='d-flex flex-stack pt-10'>
<div className='mr-2'>
<button
onClick={prevStep}
type='button'
className='btn btn-lg btn-light-primary me-3'
data-kt-stepper-action='previous'
>
<KTIcon iconName='arrow-left' className='fs-4 me-1' />
Back
</button>
</div>
<div>
<button type='submit' className='btn btn-lg btn-primary me-3'>
<span className='indicator-label'>
{stepper?.currentStepIndex !== ((stepper?.totalStepsNumber || 2) - 1) && 'Continue'}
{stepper?.currentStepIndex === ((stepper?.totalStepsNumber || 2) - 1) && 'Submit'}
<KTIcon iconName='arrow-right' className='fs-3 ms-2 me-0' />
</span>
</button>
</div>
</div>
</Form>
)}
</Formik>
</div>
</div>
</Content>
</>
)
}
export {Vertical}